サーバーとクライアントを持つ Java プログラムを作成し、Zip ファイルをサーバーからクライアントに送信しています。私はほとんどファイルを送信しました。しかし、受信すると、いくつかの矛盾が見つかりました。私のコードは常に完全なアーカイブを取得するとは限りません。BufferedReader が完全になる前に終了していると思います。クライアントのコードは次のとおりです。
public void run(String[] args) {
try {
clientSocket = new Socket("jacob-custom-pc", 4444);
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedInputStream(clientSocket.getInputStream());
BufferedReader inRead = new BufferedReader(new InputStreamReader(in));
int size = 0;
while(true) {
if(in.available() > 0) {
byte[] array = new byte[in.available()];
in.read(array);
System.out.println(array.length);
System.out.println("recieved file!");
FileOutputStream fileOut = new FileOutputStream("out.zip");
fileOut.write(array);
fileOut.close();
break;
}
}
}
} catch(IOException e) {
e.printStackTrace();
System.exit(-1);
}
}
では、ファイルを書き込む前に完全なアーカイブがあることを確認するにはどうすればよいでしょうか?