在我的应用程序中,我通过蓝牙接收字节流。
我正在使用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);
}
这会获得性能吗?或者它会保持不变,因为我从输入流中读取恒定的字节数?
感谢
答案 0 :(得分:1)
我可以通过在BufferedInputStream中包装mInStream并将此BufferedInputStream放入DataInputStream来提高性能吗?
这取决于您正在读取的缓冲区的大小。 BufferedInputStream
的默认内部缓冲区为8k字节。如果您自己的缓冲区与此相当或更大,则没有任何优势。如果您的缓冲区是128或256字节,那几乎肯定是。
... = dataInputStream.readFully(buffer,0,length);
readFully()
不会返回值。只有当您确定需要这么多字节时才应该使用此方法,并且它们应该全部存在于输入中。如果剩余输入短于'length
,则会抛出EOFException
并且您将丢失已部分读取的任何数据。如果您不确定应该阅读多少数据,请使用read(byte[])
或read(byte[], int, int).