Java InputStream大小
我需要获取InputStream的大小(以字节为单位)而不创建File实例。 有没有办法使用Java NIO?
一般的InputStream
? 您必须继续读取和读取(例如,反复进入相同的缓冲区),计算您读取的字节数,直到您到达流的末尾。
当然,您将无法自己读取数据…如果您想这样做,您需要在读取数据时保留数据,例如将数据复制到ByteArrayOutputStream
。
(如果你能够在计算长度的同时处理数据,那么就这样做 – 当你用循环读取数据时,每次读入同一个缓冲区,只需增加一个计数器来记录你的数量)你已经读过了。你还没有真正向我们提供有关你想用流做什么的任何信息。)
它原则上是不可知的(考虑一个永不停止写作的同伴),你不需要它。 只需使用固定大小的缓冲区读取和写入循环。 NIO不提供任何神奇的解决方案。
另外两个选项:
根据输入流的阻塞特性,您可以在流上调用available() 。
如果流很小,可以将它们写入PushbackInputStream ,计算字节数然后倒回。
您可以使用Utils.java的getBytes(inputStream)获取InputStream的大小,请检查以下链接
从Inputstream获取字节