7

我需要在不创建 File 实例的情况下获取 InputStream 的大小(以字节为单位)。有没有办法使用 Java NIO 来做到这一点?

4

4 回答 4

26

将军的InputStream?您必须不断地阅读和阅读(例如,一遍又一遍地读入同一个缓冲区)计算您已经阅读了多少字节,直到您到达流的末尾。

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

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

于 2012-07-31T18:57:33.663 回答
6

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

于 2012-07-31T23:00:22.870 回答
1

几个额外的选项:

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

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

于 2012-07-31T19:57:54.147 回答
-2

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

从输入流中获取字节

于 2013-03-21T12:15:33.603 回答