4

System.outはPrintStreamオブジェクトです。PrintStreamのドキュメントを読みました。System.out.printによってバッファがフラッシュされるのはなぜですか?それはprintlnだけで起こるべきではありませんか?

4

3 に答える 3

1

それはprintlnだけで起こるべきではありませんか?

Javadocは、いつフラッシュされないかについては述べていません。そして、それはまたは改行でフラッシュされる言っています。println()

于 2012-10-17T03:50:27.690 に答える
1

すでに指摘されている事実を繰り返すリスクを冒して、ドキュメントを少し異なる方法で解釈してみましょう...

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が無効になっている場合は文句を言うことはできません。ここでも同じです。

于 2012-10-17T05:21:29.137 に答える
0

System.out.print()を呼び出すときにバッファをフラッシュする必要があるのは、バッファを印刷するためです。印刷と呼ぶときは、何かを印刷したいです。フラッシュしなかった場合は、バッファに残っているだけで、何も表示されません。

ここでフラッシュをチェックしてください。

基本的には、すぐに印刷されることが保証されています。

于 2012-10-17T01:15:20.973 に答える