【问题标题】:Java how to read from an InputStream the incomed size? [duplicate]Java如何从InputStream中读取收入大小? [复制]
【发布时间】:2014-11-03 22:20:09
【问题描述】:
byte[] b = new byte[10000];
len = readerIn.read(b); // InputStream

我的字节大小是 10000,但 InputStream 的大小可能会更低或更高。有没有办法只读取进入InputStream 的数据大小?

【问题讨论】:

  • 您是在问如何将输入流完全读入正确长度的字节数组中?或者你只是想知道流的大小,而不阅读它?
  • @Duncan 是的,我想读取正确的大小,确切的大小,不多或少到字节数组或任何其他可以帮助我保存读取的字节的类
  • 不加载就无法获取大小。
  • Grrrrrr,您编辑了您的评论,就像我关闭了另一个问题的副本一样。正确的副本是:Convert InputStream to byte array in Java。你赢得了我的反对票,因为这是一个很容易研究的话题。

标签: java


【解决方案1】:

在read方法中不加参数,可以逐字节读取数据的总大小:

len = readerIn.read();

你可以读到流的结尾

 while((readerIn.read())!=-1){

     [your code]

 }

【讨论】:

  • 如果我这样读,如果没有字节缓冲区参数,数据会放在哪里?
  • 读取一个字节,然后返回一个字节。我不认为这是你想要的。
  • 这是完全错误的。这会从输入流中读取一个字节。
  • 我已经编辑了答案。我没有表达好。我忘了添加循环
  • @RafaRomero 还有一个问题,如果没有明确指出大小字节 [] = 新字节 [1024],我如何阅读它,我希望使它成为动态的,但在这里我必须创建这个字节数组再次
【解决方案2】:

您可以为此使用ByteArrayOutputStream

ByteArrayOutputStream baos = new ByteArrayOutputStream();
int reads = is.read();

while(reads != -1){
    baos.write(reads);
    reads = is.read();
}

byte[] data = baos.toByteArray();

数据数组大小合适,包含InputStream的所有数据

【讨论】:

猜你喜欢
  • 2016-05-31
  • 2013-01-07
  • 2023-04-06
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多