2011-10-23 5 views
1

ファイルといくつかの追加データをtcpソケットで転送したいと思います。データを複数の送信に分割しなくても、1回でそれを実行できれば本当にうれしいでしょう。tcp(Java)でファイルと追加データを転送する

String data = "some data to be transferred"; 
File f = new File("myfile"); 
byte[] fileData = ... //read bytes from file 
out.write(data + fileData);  //out is some OutputStream 

のようなもの、のOutputStreamの種類そのためだろうI最適な使用?受信側でデータとファイルの内容をどのように分けることができますか?

EDIT:私は既に、PrintWriterとBufferedInputReaderの両方を使用しているtcpクライアントとサーバーを持っています。これまでに送信されたデータは単純な文字列だけです。私はファイル転送を統合する簡単な方法を探しています。

答えて

2

TCPなので、データは常に転送され、送信されたのと同じ順序で到着することがわかります。それを知って、どの順序でデータを送信したのかは、送信したデータを送信したのと同じ順序でただちに "解凍"することができます。

もう1つの解決策は、serializableを実装するオブジェクトにコンテンツをラップすることです。この手法を使用している場合は、シリアライゼーションがそれを処理するので、パッキングとアンパックについて心配する必要はありません。これを使用してHere's an example

+0

私は、PrintWriterとBufferedInputReaderを使用して文字列だけが送信される既存のtcpクライアント/サーバーコードと簡単に統合できるソリューションを探しています。 – mort

+1

次に、 'byte []'を['Base64'](http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html)の文字列に変換しようとする必要があります。それは良い解決策ではありません。代わりに、['' DataOutputStream'](http://download.oracle.com/javase/6/docs/api/java/io/DataOutputStream.html)と['' DataInputStream''(http://download.oracle) .com/javase/1.4.2/docs/api/java/io/DataInputStream.html)。文字列と生の 'byte [] 'の両方を送ることができます。 –

+0

さて、私はDataInput/OutputStream – mort

関連する問題