以下のコードは、期待どおりに動作することもあれば、書き込みを行わずに空のファイルを作成したり、バッファーの一部を書き込んで小さなファイルを作成したりすることもあります。ここで私は何を間違えましたか?ここで私が時々言及したのは、連続する呼び出しがそれらのいずれかを行うためです。コードは、サーバーからファイルをダウンロードすることです。readSize がストリームから予想される量を読み取ったことを示すたびに。ただし、常にファイルに書き込まれるとは限りません。
byte[] bytes = new byte[socket.getSendBufferSize()];
long readSize = 0;
int length = 0;
System.out.println(fileSize);
while (readSize < fileSize
&& (length = socket.getInputStream().read(bytes)) != -1) {
fileOutputStream.write(bytes, 0, length);
readSize += length;
fileOutputStream.flush();
}
fileOutputStream.flush();
fileOutputStream.close();
socket.close();