Java InputStream大小

我需要获取InputStream的大小(以字节为单位)而不创建File实例。 有没有办法使用Java NIO?

一般的InputStream ? 您必须继续读取和读取(例如,反复进入相同的缓冲区),计算您读取的字节数,直到您到达流的末尾。

当然,您将无法自己读取数据…如果您想这样做,您需要在读取数据时保留数据,例如将数据复制到ByteArrayOutputStream

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

它原则上是不可知的(考虑一个永不停止写作的同伴),你不需要它。 只需使用固定大小的缓冲区读取和写入循环。 NIO不提供任何神奇的解决方案。

另外两个选项:

根据输入流的阻塞特性,您可以在流上调用available() 。

如果流很小,可以将它们写入PushbackInputStream ,计算字节数然后倒回。

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

从Inputstream获取字节