这可能是愚蠢的问题,但我想知道缓冲区大小应该是什么 文件传输
以下是发送文件的代码
try {
ServerSocket serverSocket = new ServerSocket(1234);
Socket socket = serverSocket.accept();
jTextArea1.append("Accepted connection : " + socket+"\n");
byte [] bytearray = new byte [10485760]; //Buffer size 10Mb
FileInputStream fin = new FileInputStream(GetFile);
BufferedInputStream bin = new BufferedInputStream(fin);
int read;
OutputStream os = socket.getOutputStream();
while((read=bin.read(bytearray))!=-1){
jTextArea1.append("Sending Files...\n");//I have printed the read variable
System.out.println("Read: "+read);
os.write(bytearray,0,read);
os.flush();
}
socket.close();
serverSocket.close();
System.out.println("File transfer complete\n");
} catch (IOException ex) {
Logger.getLogger(BufferedFileTransfar.class.getName()).log(Level.SEVERE, null, ex);
}
}
注意: - 输入文件大小为143mb,因此每个缓冲区大小文件应分为15个部分,然后进行划分
输出: -
Read: 10485760
Read: 10485760
Read: 10485760
Read: 10485760
Read: 10485760
Read: 10485760
Read: 10485760
Read: 10485760
Read: 10485760
Read: 10485760
Read: 10485760
Read: 10485760
Read: 10485760
Read: 10485760
Read: 3603264
File transfer complete
因此对于同一个文件,如果我使用大缓冲区那么它会没问题吗?
答案 0 :(得分:0)
通常可以是1024
或1024*16
或1024*32
此外,您还应该使用不同的缓冲区大小测试您的应用程序,以确定哪个是最佳的。你不能提前猜测。
答案 1 :(得分:0)
传输缓冲区的常用值在几千字节(1024
到8192
左右)范围内。小尺寸的原因在于,当瓶颈是实际转移时,没有优势来获得大缓冲;小批量的几千字节的字节。使用更大的缓冲区,只会使用其中的一小部分,其余部分将浪费。
这可以通过网络或文件传输轻松测试,从8
字节左右的小缓冲区开始,然后逐渐增加它。虽然性能明显受到小缓冲区的影响,但增加超过几千字节不再影响性能。