私は、サーバーが最初にファイルサイズとファイルデータを送信するケースがあります。クライアント側で読み取るときに整数値とファイルデータを区別するにはどうすればよいですか?サーバーのTCP IP内のデータパケットを区別する
Samepleコード(OSがBufferedOutputStreamがある):あなたは、すべてのファイルは、255バイト以内の長arfeと仮定されていない限り、
// Construct a 1K buffer to hold bytes on their way to the socket.
byte[] mybytearray = new byte[(int) myFile.length()];
//File Size
os.write((int) myFile.length());
FileInputStream fis = null;
System.out.println("test+sendbytes");
// Copy requested file into the socket's output stream.
try {
fis = new FileInputStream(myFile);
} catch (FileNotFoundException ex) {
// Do exception handling
}
BufferedInputStream bis = new BufferedInputStream(fis);
try {
bis.read(mybytearray, 0, mybytearray.length);
os.write(mybytearray, 0, mybytearray.length);
os.flush();
os.close();
os.close();
// File sent, exit the main method
return;
} catch (IOException ex) {
// Do exception handling
}
'os.write((int)myFile.length())'はPeter Lawreyの答えで指摘されているように間違っています。値 'myFile.length()&0xFF'を持つ1バイトを書き込みます。また、 'os.flush()'の呼び出しは 'os.close()'の直前では不要です。 'close()'は常にコアIOクラスの残りのデータをフラッシュします。 –