私はサーバーとクライアントのアプリケーションを動作させました。小さなファイルを送信するときは完璧に動作しますが、たとえば、ソケットを介して 700 MB のムービー ファイルを送信しようとすると、
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
私はインターネットを検索し、大きなファイルを送信するためのチュートリアルをいくつか見つけましたが、それらを完全に理解することはできませんでしたが、私の問題はファイルの書き込みにあると思います.
これは、サーバーがファイルを書き込むために使用するコードです。
output = new FileOutputStream(directory + "/" + fileName);
long size = clientData.readLong();
byte[] buffer = new byte[1024];
while (size > 0 && (bytesRead = clientData.read(buffer, 0, (int) Math.min(buffer.length, size))) != -1) {
output.write(buffer, 0, bytesRead);
size -= bytesRead;
}
output.close();
クライアントがファイルを送信するために使用するコードは次のとおりです。
byte[] fileLength = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
dis.readFully(fileLength, 0, fileLength.length);
OutputStream os = socket.getOutputStream();
//Sending size of file.
DataOutputStream dos = new DataOutputStream(os);
dos.writeLong(fileLength.length);
dos.write(fileLength, 0, fileLength.length);
dos.flush();
socket.close();