代码效率:TCP上的Java传输文件

时间:2012-07-09 08:49:07

标签: java tcp client-server

我想知道尝试通过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,有什么区别?这将如何影响性能。

2 个答案:

答案 0 :(得分:4)

文件的最后一个字节到达之前的延迟基本相同。然而,第一个是优选的,尽管具有更大的缓冲区,原因如下:

  1. 数据开始更快到达。
  2. 不假设文件大小符合int
  3. 没有假设整个文件适合内存,所以
  4. 它可以在没有代码更改的情况下扩展到非常大的文件。

答案 1 :(得分:1)

您的MTU (Maximum Transmission Unit)大小可能大约为1500字节。这意味着无论您做什么,您的数据都将被分解(或组合成)。 512字节以上的任何合理缓冲区大小都可能为您提供相同的传输速度。

您发送和接收数据的方式会影响您使用的CPU数量。 Unles syou有一个快速的网络,例如10 GB,你的CPU将会跟上你的网络。

以有效的方式编写代码将确保您不会浪费CPU(这是一件好事)但不应对您的传输速度产生太大影响,而传输速度受到带宽(以及网络延迟)的限制< / p>