如何提高以下代码的文件传输速度

时间:2014-02-08 06:49:47

标签: java

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

     public static void main (String [] args ) throws IOException {

            ServerSocket serverSocket = new ServerSocket(15123);


            Socket socket = serverSocket.accept();
            System.out.println("Accepted connection : " + socket);
            File transferFile = new File ("D:\\workspace\\SpringRmiClient.rar");
            byte [] bytearray  = new byte [(int)transferFile.length()];
            FileInputStream fin = new FileInputStream(transferFile);
            BufferedInputStream bin = new BufferedInputStream(fin);
            bin.read(bytearray,0,bytearray.length);
            OutputStream os = socket.getOutputStream();
            System.out.println("Sending Files...");
            os.write(bytearray,0,bytearray.length);
            os.flush();
            socket.close();
            System.out.println("File transfer complete");

      }
}

上述程序将文件从一台PC传输到另一台PC 但是,文件传输的速度为low 有没有可用的选项来提高传输文件的速度?

1 个答案:

答案 0 :(得分:0)

使用循环和较小的缓冲区。这将大大改善延迟:

byte[] buffer = new byte[8192];
int count;
while ((count = in.read(buffer)) > 0)
{
    out.write(buffer, 0, count);
}

在您阅读完整个文件之前,您还没有传输任何内容。这样,您几乎可以立即传输第一个字节,并在读取后立即传输最终字节。

您现在的代码也是:

  • 仅适用于文件大小< = Integer.MAX_VALUE;
  • 仅适用于适合内存的文件;和
  • 可能根本不起作用,因为您正在做出read()填充缓冲区的无根据的假设。它只被要求读取一个或多个字节。