10
FileInputStream fstream = new FileInputStream(someFile.getPath());
DataInputStream in = new DataInputStream(fstream);

電話in.close()したら閉まりfstreamますか?私のコードは次のようにGC例外を与えています:

java.lang.OutOfMemoryError: GC オーバーヘッドの制限を超えました

4

2 に答える 2

9

はい、DataInputStream.close()閉じますFileInputStream

これは、メソッドの次の実装を持つDataInputStreaminheritsによるものです。FilterInputStreamclose()

    public void close() throws IOException {
        in.close();
    }
于 2012-12-26T12:13:36.693 に答える
6

Yourは、次のように記載されているドキュメントからそのメソッドをDataOutputStream継承します。close()FilterOutputStream

この出力ストリームを閉じ、ストリームに関連付けられているシステム リソースをすべて解放します。

の close メソッドはFilterOutputStream、そのフラッシュ メソッド を呼び出してから、基になる出力ストリームの close メソッドを呼び出します。

同じことがすべての実装に当てはまるはずですWriter(ただし、ドキュメントには記載されていません)。


Java で Streams を操作するときにメモリの問題が発生しないようにするには、次のパターンを使用します。

// Just declare the reader/streams, don't open or initialize them!
BufferedReader in = null;
try {
    // Now, initialize them:
    in = new BufferedReader(new InputStreamReader(in));
    // 
    // ... Do your work
} finally {
    // Close the Streams here!
    if (in != null){
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

これは、すべての Stream/Writer/Reader クラスによって実装されるAutoCloseable-interfaceを導入するため、Java7 ではそれほど面倒ではないように見えます。チュートリアルを参照してください。

于 2012-12-26T12:25:34.337 に答える