gpt4 book ai didi

java - 在读取小字节长度时使用 DataInputStream 的读取性能较慢

转载 作者:搜寻专家 更新时间:2023-11-01 08:54:13 25 4
gpt4 key购买 nike

目前我正在 Java TCP 套接字上编写视频流接收器。我已经设法很好地显示流,但我担心套接字读取的性能,因为我需要减少延迟。

每个视频负载的前 8 个字节表示视频负载本身的长度。所以我必须先获取视频有效载荷的长度,然后读取视频有效载荷直到达到指定的长度,然后再将其传递给解码器。代码是这样的:

boolean isRunning = true;
boolean isReadingHeader = true;
byte[] headerBuff = new byte[8];
byte[] videoBuff;
Socket socket;
/* socket setup goes here */
DataInputStream dis = new DataInputStream(socket.getInputStream());
while(isRunning)
{
if(isReadingHeader) /* reading the header to get the length */
{
long start = System.currentTimeMillis();
dis.readFully(headerBuff);
long end = System.currentTimeMillis() - start;
System.out.println("Read Header : " + end + " ms");
int len = ....
videoBuff = new byte[len];
isReadingHeader = false;
}
else /* reading the video payload*/
{
long start = System.currentTimeMillis();
dis.readFully(videoBuff);
long end = System.currentTimeMillis() - start;
System.out.println("Read Payload: " + end + " ms");
/* Passing to Decoder goes here */
isReadingHeader = true;
}
}

由于输出是无穷无尽的,我将前20个输出如下(之后的输出是一致的):

Read Header : 6 ms
Read Payload : 0 ms
Read Header : 0 ms
Read Payload : 0 ms
Read Header : 0 ms
Read Payload : 0 ms
Read Header : 200 ms
Read Payload : 1 ms
Read Header : 142 ms
Read Payload : 0 ms
Read Header : 138 ms
Read Payload : 0 ms
Read Header : 135 ms
Read Payload : 0 ms
Read Header : 146 ms
Read Payload : 0 ms
Read Header : 136 ms
Read Payload : 0 ms
Read Header : 147 ms
Read Payload : 0 ms

如您所见,将 8 个字节读入 headerBuff 需要 100 毫秒到 200 毫秒,而读取长度可达 30k++ 的视频有效负载则需要 0 毫秒。我想知道为什么读取 8 个字节的数据花费的时间太长。我已经在 for 循环中尝试过 readByte() 以及 read() 方法,但执行时间是一样的。仅供引用,我在本地主机上对此进行了测试,但我的 .NET 流接收器上并未发生此延迟问题(意味着网络不是原因)。

谢谢!

最佳答案

代替

DataInputStream dis = new DataInputStream(socket.getInputStream());

尝试使用 BufferedInputStream

DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream()));

希望对你有帮助

关于java - 在读取小字节长度时使用 DataInputStream 的读取性能较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20246568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com