トップ 一覧 Farm 検索 ヘルプ RSS ログイン

InputStreamの挙動の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{category JAVA}}
{{category Java}}
{{category プログラミング}}

Javaでソケットからの入力を受けるプログラムを書いている時のことでした。
コードの一部分は、↓な感じ。


 InputStream din = new InputStream(socket.getInputStream());
 BufferedOutputStream dout =
     new BufferedOutputStream(new FileOutputStream("hogehoge"));
 byte[] data = byte[1024];
 din.read(data);
 dout.write(data);

ちなみにバイト列で受けているのは、他で、このバイト列を利用するからなのですが、
Linuxでは特に問題ないのに、Windowsで動作させると上手く動かない。
全然だめ、ということではなくて、入力バイト列のうちの、
何バイトかがランダムで化けるのです。
改行コードやら、NULLコードの問題かな〜とか思ったのですが、
そうでもないみたい。
ちなみに、入力パケットをtcpdumpで確認しても、特に問題はない感じ。
結局、入力をBufferedInputStreamで受ければ解決しました。
JVM内のバッファが、Socketでのロスや、なんやらを吸収してくれるのかなぁ。
ちなみに、DataInputStreamでもInputStreamを生で利用したときと同様に
バイトデータは破壊されていました。
...もっと詳しい理由や、解決法について知っている方、教えてくださ〜い♪