Java InputStream大小

时间:2012-07-31 18:51:02

标签: java inputstream nio

我需要在不创建File实例的情况下获取InputStream的字节大小。有没有办法使用Java NIO?

4 个答案:

答案 0 :(得分:24)

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

当然,您将无法自行阅读数据...如果您想这样做,您需要在阅读时保留数据,例如:将其复制到ByteArrayOutputStream

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

答案 1 :(得分:6)

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

答案 2 :(得分:1)

其他几个选项:

根据输入流的阻止性质,您可以在流上调用available()

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

答案 3 :(得分:-2)

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

Get Bytes from Inputstream