Java InputStream。有正确有效的方法吗?

时间:2013-07-15 20:39:25

标签: java inputstream bytebuffer bufferedinputstream inputstreamreader

我正在开发Android上的蓝牙应用程序。此inputStream来自连接套接字。我想读取一定长度的字节。

我尝试的第一种方式:

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

我发现它太慢了。

第二种方式:

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

在此我发现当读取的长度太大时,它不能完全读取数据

有人请帮帮我吗?

3 个答案:

答案 0 :(得分:4)

仅使用标准API,DataInputStream类有一个名为readFully的方法,它从流中填充一个字节数组:

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

完成后不要忘记关闭溪流!

答案 1 :(得分:1)

你究竟想做什么?

如果要读取文件中的所有字节,请执行以下操作:

Files.readAllBytes(Paths.get( “FILENAME.TXT”));

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#readAllBytes%28java.nio.file.Path%29

答案 2 :(得分:0)

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

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