System.outはPrintStreamオブジェクトです。PrintStreamのドキュメントを読みました。System.out.printによってバッファがフラッシュされるのはなぜですか?それはprintlnだけで起こるべきではありませんか?
3 に答える
それはprintlnだけで起こるべきではありませんか?
Javadocは、いつフラッシュされないかについては述べていません。そして、それはまたは改行でフラッシュされると言っています。println()
すでに指摘されている事実を繰り返すリスクを冒して、ドキュメントを少し異なる方法で解釈してみましょう...
PrintStreamのautoFlush動作を設定できるのは、 PrintBufferの作成時(つまり、コンストラクターの呼び出し中)のみのようです。
また、ご指摘のとおり、ドキュメントには、さまざまなパブリックPrintBufferコンストラクターのいずれかを呼び出すときに、自動フラッシュ状態を指定しないと、非自動フラッシュのPrintStreamが作成されると記載されています。
ただし、System.outの場合は、 PrintBufferのコンストラクターを呼び出していません。java.lang.Systemクラスは、VMの起動時に「出力」PrintStreamをインスタンス化します。つまり、Systemオブジェクトが「out」フィールドに格納するPrintStreamオブジェクトを要求すると、どのコンストラクターが呼び出されたかがわからないため、要求したときに渡されるストリームの自動フラッシュ状態がわかりません。それのための。
私は同意します。java.lang.Systemのドキュメントで、「out」フィールドに含まれるストリームの自動フラッシュ動作がtrueに設定されていると指定されていれば、本当に良かったでしょう。しかし、これは「要件」ではありません。(仮想の)myCrazyPanel.getTheChangeColorsButton()から返されたJButtonが有効か無効かを文書化する必要があるだけです。ええ、ボタンはデフォルトで有効になっていますが、JButtonが無効になっている場合は文句を言うことはできません。ここでも同じです。
System.out.print()を呼び出すときにバッファをフラッシュする必要があるのは、バッファを印刷するためです。印刷と呼ぶときは、何かを印刷したいです。フラッシュしなかった場合は、バッファに残っているだけで、何も表示されません。
ここでフラッシュをチェックしてください。
基本的には、すぐに印刷されることが保証されています。