Keresés

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

  • floatr

    veterán

    válasz tick #7480 üzenetére

    Igaza van a többieknek a Writer osztályokkal kapcsolatban a doksi alapján, de:

    public abstract class Writer implements Appendable, Closeable, Flushable {
    ...
    abstract public void close() throws IOException;
    ...
    }

    garancia nincsen rá h az implementációk meg is fogják csinálni.

    public class FileWriter extends OutputStreamWriter {
    ...
    }

    a FileWriter egy OutputStreamWriter "wrapper"

    public class OutputStreamWriter extends Writer {

    private final StreamEncoder se;
    ...
    public void close() throws IOException {
    se.close();
    }
    ...
    }

    namost a StreamEncoder nálam egy sun csomagos implementáció, a bytekód szerint úgy látom h meghív két flush jellegű metódust

    void implClose() throws java.io.IOException;
    0 aload_0 [this]
    1 aconst_null
    2 iconst_1
    3 invokespecial sun.nio.cs.StreamEncoder.flushLeftoverChar(java.nio.CharBuffer, boolean) : void [64]
    6 aload_0 [this]
    7 getfield sun.nio.cs.StreamEncoder.encoder : java.nio.charset.CharsetEncoder [39]
    10 aload_0 [this]
    11 getfield sun.nio.cs.StreamEncoder.bb : java.nio.ByteBuffer [41]
    14 invokevirtual java.nio.charset.CharsetEncoder.flush(java.nio.ByteBuffer) : java.nio.charset.CoderResult [71]

    tehát elvileg jó a cucc, ha a sort lezárod. Ennek ellenére én továbbra is aszondom, hogy ártani nem árt, ha használod a flush-t, ráadásul ha netán Writer helyett OutputStream-et használsz valahol, akkor megkíméled magad egy sunyi problémától.

    [ Szerkesztve ]

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