Hirdetés

Keresés

Új hozzászólás Aktív témák

  • thon73

    tag

    válasz Karma #1180 üzenetére

    Hátha mást is érdekel, itt a rövid logikája a próbának; egyszerűség kedvéért file helyett stringek, hibakezelés és optimalizálás nélkül. 'c' átalakítása az első ciklusba, a kiírás elé kerülhet. (ed1-ed2-ed3 egyszerűen három EditText. ed2 csak azért kódol ISO-8859-1-et, hogy lássam, hogyan is kerülnek kiírásra a byte-ok.)
    Kifelejtettem a lényeget: ed1 (UTF-16 String) -> outputStream==inputStream (UTF-8 byte-array) -> ed3 (UTF-16 String). Tehát oda-vissza elvégzi az átalakítást, és nem String-gel (bár abból indul), hanem Character-folyammal dolgozik.

    int c;

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");

    StringReader stringReader = new StringReader( ed1.getText().toString() );

    while ( (c=stringReader.read()) != -1 )
    {
    outputStreamWriter.write( c );
    }
    outputStreamWriter.close();

    ed2.setText( outputStream.toString("ISO-8859-1") );

    ByteArrayInputStream inputStream = new ByteArrayInputStream( outputStream.toByteArray() );
    InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");

    StringWriter stringWriter = new StringWriter();

    while ( (c=inputStreamReader.read()) != -1 )
    {
    stringWriter.write( c );
    }
    stringWriter.close();

    ed3.setText( stringWriter.toString() );

    Érdekes, hogy keresgélés közben StraemReader/Writer osztályokat is átfutottam, de nem ugrott be, hogy erre van szükségem. ((Hát, látszik, hogy nem a javaba "nőttem bele", ráadásul évekig nem írtam semmi komolyat. :B ))

    A replaceEach is jó ötlet, (és ezzel visszajutottunk a túloptimalizáláshoz.) Ha legyártok egy új string-et, ami már az átalakított részeket tartalmazza, akkor áttekinthetőbbé válik a kód, ill. a fenti helyett a mentést is egy sorban meg tudom oldani. Nem nagy ár ezért az új string létrehozása, akkor sem ha több ezerszer történik meg.

    Köszönöm a segítséget, az eredetitől gyökeresen eltérő logikájú kód született, de sokkal szebb, és jobb. Nem végeztem még méréseket, de nem tűnik nagyságrendekkel lassúbnak. (Gondolom, az SD kártya sebessége lesz a meghatározó...)

Új hozzászólás Aktív témák