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

代码效率:通过TCP的Java传输文件,java,tcp,client-server,Java,Tcp,Client Server,我想知道这两个试图通过TCP套接字发送大文件的块在性能方面的差异。 我找不到多少资源来解释它们的效率 A- B- 哪一个在传输延迟方面更好 如果我将大小设置为1024或65536,又有什么区别?这将如何影响性能。直到文件最后一个字节到达的延迟基本相同。然而,出于以下原因,第一个更可取,尽管缓冲区要大得多: 数据开始提前到达 没有假设文件大小适合int 没有假设整个文件都可以放入内存,所以 它可以扩展到非常大的文件,而无需更改代码 直到文件最后一个字节到达的延迟基本相同。然而,出于以下原因,第一个

我想知道这两个试图通过TCP套接字发送大文件的块在性能方面的差异。 我找不到多少资源来解释它们的效率

A-

B-

哪一个在传输延迟方面更好


如果我将大小设置为1024或65536,又有什么区别?这将如何影响性能。

直到文件最后一个字节到达的延迟基本相同。然而,出于以下原因,第一个更可取,尽管缓冲区要大得多:

  • 数据开始提前到达
  • 没有假设文件大小适合
    int
  • 没有假设整个文件都可以放入内存,所以
  • 它可以扩展到非常大的文件,而无需更改代码

  • 直到文件最后一个字节到达的延迟基本相同。然而,出于以下原因,第一个更可取,尽管缓冲区要大得多:

  • 数据开始提前到达
  • 没有假设文件大小适合
    int
  • 没有假设整个文件都可以放入内存,所以
  • 它可以扩展到非常大的文件,而无需更改代码
  • 您的大小可能在1500字节左右。这意味着无论您做什么,您的数据都将被分解(或组合成)这个大小。任何从512字节以上的合理缓冲区大小都可能为您提供相同的传输速度

    发送和接收数据的方式会影响CPU的使用量。除非您有一个快速的网络,例如10 GB,否则您的CPU将无法跟上您的网络

    以高效的方式编写代码将确保不会浪费CPU(这是一件好事),但不会对受带宽(和网络延迟)限制的传输速度造成太大影响。

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

    发送和接收数据的方式会影响CPU的使用量。除非您有一个快速的网络,例如10 GB,否则您的CPU将无法跟上您的网络


    以高效的方式编写代码将确保您不会浪费CPU(这是一件好事),但不会对受带宽(和网络延迟)限制的传输速度造成太大影响。

    我还有一个问题,我在接收方接收代码的方式是否会影响传输延迟。目前我正在使用它来接收:byte[]mybytearray=newbyte[filesize];bytesRead=is.read(mybytearray,0,mybytearray.length);当前=字节读取;do{bytesRead=is.read(mybytearray,current,(mybytearray.length-current));if(bytesRead>=0){current+=bytesRead;}代码A的两端应该是相同的,就像上面的第一个示例一样,正如我在这里所说的。我还有一个问题,我在接收方接收它的方式是否会影响传输延迟。目前我使用它来接收:byte[]mybytearray=new byte[filesize];bytesRead=is.read(mybytearray,0,mybytearray.length);current=bytesRead;do{bytesRead=is.read(mybytearray,current,(mybytearray.length-current));if(bytesRead>=0){current+=bytesRead;}代码a的两端应该是相同的,如上面的第一个示例,正如我在这里所说的。谢谢你,彼得。我将尝试使用不同的值进行实验,看看它对速度的影响。通过环回,你应该会看到不同,因为你的带宽非常高。谢谢你,彼得。我将尝试使用不同的值进行实验要查看它对速度的影响。通过环回,您应该看到不同,因为您的带宽非常高。
    byte[] buffer = new byte[1024];
    int number;
    
    while ((number = fileInputStream.read(buffer)) != -1) {
    socketOutputStream.write(buffer, 0, number);
    }
    
    byte mybytearray = new byte[filesize];
    os.write(mybytearray);