2010-11-29 5 views
4

を停止するアプリケーションが発生します。なBufferedOutputStreamを使用すると、私は自分のサーバー/クライアントのペアにコード行を持って

BufferedOutputStream out = new BufferedOutputStream (clientSocket.getOutputStream()); 

それは私はそれを修正した後ならば、コードがうまく機能し、正常に動作します:

BufferedOutputStream out = new BufferedOutputStream (new BufferedOutputStream(clientSocket.getOutputStream())); 

アプリケーションの実行が停止し、出力が送信されます。私は実際にそのような変更を行いました。このような流れ、特にソケットについては、非常に新しいものです。

明らかなエラーはありますか?

+0

明らかなエラーの1つは、上記の2番目のコードスニペットがコンパイルされないことです。 ObjectOutputStreamをBufferedOutputStreamに割り当てることはできません。 –

+0

それは真夜中で、私は疲れていました!私はそのコードブラインドを書いた。謝罪。 – Clintonio

答えて

6

はい、これはBufferedOutputStreamの動作と一貫しています。その名前のとおり、送信前に出力をバッファします。

ObjectOutputStreamにオブジェクトを書き込むと、そのバイトはBufferedOutputStreamに渡され、そのバッファはバッファがいっぱいになるとソケットに送信されます。だから、あなたのオブジェクトは、バッファーに流され、フラッシュされるのを待っているでしょう。だからあなたの出力は本当に "送信"されていない、彼らはソケットまでそれを作っていないので。

BufferedOutputStreamを引き続きご使用になる場合は、定期的に連絡を取るために、flush()を定期的に送信する必要があります。 ObjectOutputStreamflush()メソッドは、BufferedOutputStreamflush()を呼び出し、バッファを空にしてオブジェクトをパイプの下に送ります。

私はなぜ、BufferedOuputStreamを使用する必要があるのか​​、質問する必要があります。解決するためにバッファリングが必要なパフォーマンス上の問題がありますか?そうでない場合は、それを放置するだけで、必要のない複雑さが増します。

+0

ありがとう、それは私の質問を解決します。私は自分のソリューションを完成させたが、BufferedOutputStreamを使用していない。 – Clintonio

関連する問題