从InputStream读取块的字节

时间:2014-10-02 06:02:43

标签: java android bluetooth buffer inputstream

在我的应用程序中,我通过蓝牙接收字节流。 我正在使用DataInputStream从输入流中一次读取固定数量的字节:

private final InputStream mInStream = ...
...
DataInputStream dataInputStream = new DataInputStream(mInStream);
...
while(true) {
... = dataInputStream.readFully(buffer,0,length);
}

我可以通过在BufferedInputStream中包装mInStream并将此BufferedInputStream放入DataInputStream来提高性能吗? E.g:

private final InputStream mInStream = ...
...
BufferedInputStream buffInStream = new BufferedInputStream(mInStream);
DataInputStream dataInputStream = new DataInputStream(buffInStream);
...
while(true) {
... = dataInputStream.readFully(buffer,0,length);
}

这会获得性能吗?或者它会保持不变,因为我从输入流中读取恒定的字节数?

感谢

1 个答案:

答案 0 :(得分:1)

  

我可以通过在BufferedInputStream中包装mInStream并将此BufferedInputStream放入DataInputStream来提高性能吗?

这取决于您正在读取的缓冲区的大小。 BufferedInputStream的默认内部缓冲区为8k字节。如果您自己的缓冲区与此相当或更大,则没有任何优势。如果您的缓冲区是128或256字节,那几乎肯定是。

... = dataInputStream.readFully(buffer,0,length);

readFully()不会返回值。只有当您确定需要这么多字节时才应该使用此方法,并且它们应该全部存在于输入中。如果剩余输入短于'length,则会抛出EOFException并且您将丢失已部分读取的任何数据。如果您不确定应该阅读多少数据,请使用read(byte[])read(byte[], int, int).