代码之家  ›  专栏  ›  技术社区  ›  user1566669

Java输入流大小

  •  7
  • user1566669  · 技术社区  · 14 年前

    我需要在不创建File实例的情况下获得InputStream的字节大小。有没有任何方法可以使用Java NIO来实现这一点?

    4 回复  |  直到 14 年前
        1
  •  26
  •   Jon Skeet    14 年前

    将军的 InputStream ?你只需要不断地读(例如,一遍又一遍地读到同一个缓冲区),计算你读了多少字节,直到流结束。

    当然,你将无法读取数据本身。。。如果你想做到这一点,你需要在阅读数据时保留数据,例如将其复制到 ByteArrayOutputStream

    (如果你能够在计算长度的同时处理数据,那就这样做吧——当你使用循环读取数据时,每次读取同一个缓冲区,只需增加一个计数器来记录你读取了多少。你还没有真正向我们提供任何关于你想对流做什么的信息。)

        2
  •  6
  •   user207421    12 年前

    原则上它是不可知的(考虑一个从不停止写入的对等体),你也不需要它。只需使用固定大小的缓冲区在循环中读取和写入即可。NIO没有提供任何神奇的解决方案。

        3
  •  1
  •   Nicholas    14 年前

    几个附加选项:

    取决于 阻塞 输入流的性质,您可以调用 available() 在溪流上。

    如果小溪很小,你可以把它们写进 PushbackInputStream s、 计算字节数,然后倒带。

        4
  •  -3
  •   Gnanam R    13 年前

    您可以使用Utils.java的getBytes(InputStream)获取InputStream的大小。请检查以下链接

    Get Bytes from Inputstream