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
有没有可用的选项来提高传输文件的速度?
答案 0 :(得分:0)
使用循环和较小的缓冲区。这将大大改善延迟:
byte[] buffer = new byte[8192];
int count;
while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}
在您阅读完整个文件之前,您还没有传输任何内容。这样,您几乎可以立即传输第一个字节,并在读取后立即传输最终字节。
您现在的代码也是:
Integer.MAX_VALUE;
read()
填充缓冲区的无根据的假设。它只被要求读取一个或多个字节。