-2

配列 byte[] には、写真の完全なバイト単位のコピーが含まれています。byte[] を文字列に変換してファイルに書き込もうとすると、失敗します。

後でソケットを介して送信するために、文字列に変換する必要があります。

接続ごとのハンドラーには Socket (sock)、PrintWriter (out)、BufferedReader (in) があり、Socket を PrintWriter と BufferedReader に関連付けます。これで、out.println と in.readLine で文字列を送受信します。

どうすればこれを修正できますか?

テストコード:

// getPhoto() returns byte[]
String photo = new String(getPhoto());

// Create file
DataOutputStream os = new DataOutputStream(new FileOutputStream("out1.jpg"));
// This makes imperfect copy of the photo
os.writeBytes(photo);

//This works perfectly basically it copies the image through byte[]
//os.write(getPhoto());

// Close the output stream
os.close();
4

2 に答える 2

8

配列 byte[] には、写真の完全なバイト単位のコピーが含まれています。byte[] を文字列に変換してファイルに書き込もうとすると、失敗します。

はい。これは、文字列はテキスト用であり、写真はテキストではないためです。文字列に変換しないでください。も必要ありませんDataOutputStream

OutputStream os = new FileOutputStream("out1.jpg");
try {
    os.write(getPhoto());
} finally {
    os.close();
}
于 2013-02-07T18:28:10.980 に答える
0

バイナリ データを文字列に読み込まないでください。tetx でない場合は、String を使用しないでください。

于 2013-02-07T18:28:28.690 に答える