2016-03-24 6 views
3

Javaで多くの記事を読むと、closeメソッドを呼び出すことができます。flushOutputStreamのJDK子孫の呼び出しはありません。実際に私はいつも上書きします(私が必要なときはまれです)close最後のクローズの前にflushを呼んでいます。私は安全にcloseflushなしで呼ぶことができることを明確に述べた公式の文書を見たいと思っています。フラッシュなしで閉じるのドキュメントはどこにありますか

ここにいくつかのドキュメントがありますか?

+0

これは助けになるかもしれませんが、私は統一された答えで質問の周りに多くの混乱を参照してください:http://stackoverflow.com/questions/2732260/in-java-when-i-call-outputstream-close-do- i-always-need-to-call-outputstream – epoch

+0

これは、たとえば のように指定されているものもあります。http://docs.oracle.com/javase/8/docs/api/java/io/OutputStreamWriter.html#close% 28%29 https://docs.oracle.com/javase/7/docs/api/java/io/FilterOutputStream.html 反対の例もあります。 https://docs.oracle.com/javase /7/docs/api/java/io/ObjectOutputStream.html#close%28%29 – Fakenick

+0

私の回答を編集しました –

答えて

2

非常に良い質問! はい、flush()への電話はと思われます。

さて、JavadocのはどれもOutputStreamに関係しないか、それがCloseableのように実装して様々なインタフェースは、ストリームを閉じる前flush()を呼び出すことについては何も言及します。これはかなり長い間今のようでした。

しかし、あなたがなどBufferedWriterPrintWriter、のような他のWriterクラスclose()ドキュメントを見れば、特にそれが閉じられる前に、ストリームがフラッシュされると述べています。これは、すべてがWriterクラスを実装しており、そこにあるドキュメントがこの動作を指定しているためです。

あなたの推測はここの私のものと同じくらい良いです。しかし、私はストリームを閉じる前にフラッシュしていないときは、何の問題にも直面していません。だから、flush()への呼び出しが実際に行われたと思われます。おそらく、Flushableインターフェイスの結果です。

私が見つけた一つの共通の特徴は、クラスがWriterインタフェースを実装している場合、ドキュメントは必ずclose()flush()最初を呼び出した後、ストリームを閉じているという事実に言及していることです。

EDIT !!!

OutputStreamが抽象クラスであるため、少し掘り下げました。私はOutputStreamを延長することが起こったFilterOutputStreamを見つけました。そのためsource codeからclose()方法...

public void close() throws IOException { 
    try { 
      flush(); 
     } catch (IOException ignored) { 

     } 
     out.close(); 
    } 
} 

BufferedOutputStreamDataOutputStreamPrintStreamFilterOutputStreamを拡張し、結果として、同じclose()方法を継承します。最低でも、これらのクラスのclose()に電話をかけてください。

0

続いて@Debosmit Raysがリードしてソースを確認しました。

  • ByteArrayOutputStreamがたFileOutputStreamはFilterOutputStreamが
  • 近くにObjectOutputStreamのは
  • 近くに持つPipedOutputStreamが
  • 近い組織でフラッシュフラッシュフラッシュしないんん
  • 近い
  • にフラッシュしない
  • 近くでフラッシュしません。ああ、神様。FilterOutputStreamかにObjectOutputStreamを拡張するクラスは、FilterOutputStreamの子クラスはずもフラッシュ近い機能をオーバーライドしないようCORBA_2_3.portable.OutputStreamは限り近い

にフラッシュしません。

+0

いくつかの問題があります。 'FilterOutputStream' **はcloseメソッドでフラッシュします**。 'OutputStream'は抽象クラスです。明らかに実装はありません。 –

関連する問題