我想知道尝试通过TCP套接字发送大文件的这两个块之间的性能差异。 我找不到太多解释其效率的资源。
A-
byte[] buffer = new byte[1024];
int number;
while ((number = fileInputStream.read(buffer)) != -1) {
socketOutputStream.write(buffer, 0, number);
}
B-
byte mybytearray = new byte[filesize];
os.write(mybytearray);
哪一个在传输延迟方面更好?
如果我将大小设置为1024或65536,有什么区别?这将如何影响性能。
答案 0 :(得分:4)
文件的最后一个字节到达之前的延迟基本相同。然而,第一个是优选的,尽管具有更大的缓冲区,原因如下:
int
。答案 1 :(得分:1)
您的MTU (Maximum Transmission Unit)大小可能大约为1500字节。这意味着无论您做什么,您的数据都将被分解(或组合成)。 512字节以上的任何合理缓冲区大小都可能为您提供相同的传输速度。
您发送和接收数据的方式会影响您使用的CPU数量。 Unles syou有一个快速的网络,例如10 GB,你的CPU将会跟上你的网络。
以有效的方式编写代码将确保您不会浪费CPU(这是一件好事)但不应对您的传输速度产生太大影响,而传输速度受到带宽(以及网络延迟)的限制< / p>