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

时间:2013-11-27 15:33:13

标签: java android performance video-streaming

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

每个视频有效负载的前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需要100ms到200ms,同时读取视频有效载荷,其长度可以是30k ++,在0ms内完成。我想知道为什么花费太长时间来读取8个字节的数据。我在for循环和read()方法中尝试过readByte()但执行时间是一样的。仅供参考,我在本地主机上测试了这个,这个延迟问题在我的.NET流接收器上没有发生(意味着网络不是原因)。

谢谢!

1 个答案:

答案 0 :(得分:3)

而不是

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

尝试使用BufferedInputStream

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

希望有所帮助