无法在Java中通过套接字发送大文件

Roh*_*ish 3 java sockets

我得到了服务器和客户端应用程序,它们在发送小文件时工作得很好,但是当我尝试发送例如700mb的电影文件时,它给了我

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

我搜索了互联网并发现了一些关于发送大文件的教程,但是对它们不太了解,但我认为我的问题是写文件.

这是服务器用来编写我的文件的代码:

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();
Run Code Online (Sandbox Code Playgroud)

这是我的客户端用来发送文件的代码:

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();  
Run Code Online (Sandbox Code Playgroud)

use*_*421 7

它给你,OutOfMemoryError因为你试图在发送之前将整个文件读入内存.这是100%完全和完全没必要.只需读取和写入块,就像在接收代码中一样.