• ベストアンサー

Stream の選択について

かなり暖かくなってきましたね。 花見が待ち遠しいです。 質問なんですが Socket で byte 配列の送受信する サーバ&クライアントを作成しているのですが DataInputStream と OutputStreamWriter を利用しています。 この選択が正しいのかちょっと自信が持てないのですが 教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • thamansa
  • ベストアンサー率40% (95/232)
回答No.1

byte 配列を送信すると書いてありますが、 バイナリデータをそのまま送受信するのですか? なら 送信側 OutputStream outputStream = socket.getOutputStream(); BufferedOutputStream out = new BufferedOutputStream(outputStream); out.write(byteArray); 受信側 InputStream inputStream = socket.getInputStream(); BufferedInputStream in = new BufferedInputStream(inputStream); int readSize = in.read(buffer); それとも、文字列をbyte[]に変換して送りたいのでしょうか?

Zepetto
質問者

お礼

ありがとうございます。 文字列のやりとりではないので BufferedInputStream と BufferedOutputStream で 送受信を行う形にしました。 最初に試していた組み合わせでは なぜかデータが欠損してしまっていたので この形で問題ないことが確認できました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • ecogilis
  • ベストアンサー率60% (12/20)
回答No.2

こんにちはー。そうですねあったかいですね。仕事をサボって昼寝するにはいい陽気です。。。いやしませんけど バイナリを単にやりとりしたいなら、InputStreamとOutputStreamでとりあえずは出来ると思います。 DataInputStreamと、OutputStreamWriter の組み合わせはそれだけの情報だと、うん?という感じで、なんも考えず回答するなら、DataInputStreamを使うならDataOutputStreamを使ったほうが良いんじゃんと思っちゃいます。 OutputStreamWriterで、文字列を任意の文字コードのバイトデータで送信して、受信側ではDataInputStreamでbyte配列として読み込み、送信時に指定した文字コードでbyte配列から文字列に復元するコードをソース中に埋め込む、、、ということを考えてるならあってるような気がします。 ただそれならそうでも、DataInputStream使うよりかはInputStreamReaderを使ったほうが良いんじゃないかとも思います。 (簡易な文字列の送受信を行うものでよいケースであるなら)、普通はInputSteamReaderと、OutputStreamWriterの組み合わせをチョイスするんじゃないでしょうか。 これであればプロトコルは一緒になるので。

Zepetto
質問者

お礼

ほんと昼過ぎなんて目蓋が重いですねぇ。 ありがとうございます。 送信側と受信側の組み合わせとして 対になってるのがやはりいいのですね。 そんな基本的な部分を見落としていました。 そのため以前の組み合わせではデータが 正しく受け取れない状態になってました。

すると、全ての回答が全文表示されます。

関連するQ&A