Java 计算通过套接字发送/接收的数据的带宽速度?
有人对如何计算套接字的带宽使用有什么建议吗 例如,当我通过套接字向所连接的服务器发送数据时,我希望显示正在发送的Kb/sJava 计算通过套接字发送/接收的数据的带宽速度?,java,sockets,iostream,Java,Sockets,Iostream,有人对如何计算套接字的带宽使用有什么建议吗 例如,当我通过套接字向所连接的服务器发送数据时,我希望显示正在发送的Kb/s 谷歌搜索没有透露任何有用的信息。可能我搜索了错误的术语。您可能最容易做到的就是在开始写入时记录,然后计算成功发送到Socket.getOutputStream.write()方法的字节数。对于少量的数据,这将是非常不准确的,因为它只是填充操作系统的传输缓冲区,而传输缓冲区最初占用的字节数要比实际发送的字节数快得多 然而,在相当大的数据量上,它应该以基本正确的比率进行摊销。这在
谷歌搜索没有透露任何有用的信息。可能我搜索了错误的术语。您可能最容易做到的就是在开始写入时记录,然后计算成功发送到
Socket.getOutputStream.write()方法的字节数。对于少量的数据,这将是非常不准确的,因为它只是填充操作系统的传输缓冲区,而传输缓冲区最初占用的字节数要比实际发送的字节数快得多
然而,在相当大的数据量上,它应该以基本正确的比率进行摊销。这在理论上是可行的,但它不能提供当前传输速度的非常准确的表示。例如:如果我登录5分钟。。。前2.5分钟什么也不做,最后2.5分钟发送100kb/s。在5分钟结束时,它会告诉我平均速度是50kb/s。自从我开始传输以来,我并没有寻找平均速度。我在寻找当前的速度。也许最后5秒的平均值会起作用,但我不知道该怎么记录这样的东西。这叫做移动平均值:。虽然有各种方法,但计算起来很简单。在任何给定时刻都没有计算带宽的方法;因为数据是离散的,所以必须有一个平均值。一个非常简单的方法是average=(average+new\u measurement\u average)/2.0
。注意:Guava的方法可以很容易地将输出流包装成另一个流,该流计算它已写入的字节数。本文可能会给您一些想法: