2

我正在开发Android上的蓝牙应用程序。这个inputStream来自连接套接字。我想读取一定长度的字节。Java InputStream。有没有正确和有效的方法?

我第一次尝试的方法:

byte[] data = new byte[lengthtoread]; 
for (int i = 0; i < data.length; i++) 
    data[i] =(byte) mmInStream.read() ; 

我发现它过于缓慢。

Sencond方式:

byte[] data = new byte[lengthtoread]; 
    mmInStream.read(data, 0, lengthtoread); 

在此我发现它不读取数据时完全长阅读过大

请人帮我?

+0

你是怎么知道的(第二种方法)? 'lengthtoread'的价值是什么?目标文件大小是多少? – 2013-07-15 20:50:12

+0

lengthtoread有时大到有时会高达90000或多或少 –

+0

那么为什么你要一次读全部?这不是一个好主意,试图缓冲数据 – 2013-07-16 18:27:01

回答

4

只使用标准的API,将DataInputStream类有一个叫做readFully方法填充来自流中的字节数组:

byte[] data = new byte[lengthtoread]; 
DataInputStream in = new DataInputStream(mmInStream); 
in.readFully(data); 

不要忘记关闭流,当你完成跟他们!

0

是:使用Jakarta Commons IOUtils。该类包含用于读取和写入流的完全调试的实用程序方法。

如果要读取整个流,请使用IOUtils.toByteArray()。但是,请注意,在执行此操作时可能会耗尽内存。通常最好一次处理一部分流。

相关问题