JAva socketリードバイト問題


Java socketはreadlineでデータを解析していたが、ハードウェアデバイスと通信してreadlineにtが必要であることを知った.
                           OutputStream o = socket.getOutputStream();
			o.write(message.getBytes("UTF-8"));
//			out = new PrintWriter(socket.getOutputStream(), true);
//			out.println(message);//    
			InputStream isr=new BufferedInputStream(socket.getInputStream());//      

今日また同僚がこの問題に出会ったので、覚えておいてください.
JAva.ioクラスPrintWriter
ストリーム印刷オブジェクトのフォーマット表示形式をテキストに出力します.このような実装は、PrintStreamにおけるすべてのprintメソッドである.元のバイトを書き込む方法は含まれません.これらのバイトについては、プログラムは符号化されていないバイトストリームを使用して書き込む必要があります.PrintStreamクラスとは異なり、自動リフレッシュが有効になっている場合、改行が出力されるたびに完了するのではなく、println、printf、formatのいずれかのメソッドが呼び出されたときにのみ、この操作が完了する可能性があります.これらのメソッドでは、改行ではなく、プラットフォーム固有の行区切り記号の概念が使用されます.
BufferedInputStreamは、入力をバッファリングし、markおよびresetメソッドをサポートする能力という別の入力ストリームにいくつかの機能を追加します.BufferedInputStreamを作成すると、内部バッファ配列が作成されます.ストリーム内のバイトを読み出したりスキップしたりする場合は、必要に応じて含まれる入力ストリームから内部バッファを再充填し、複数のバイトを一度に充填することができます.markは、入力ストリームのある点を記録するように動作し、resetは、含まれる入力ストリームから新しいバイトを取得する前に、最後のmarkの動作後に読み取られたすべてのバイトを再び読み出すように動作する.