Java InputStream 子流。可能吗?
Posted
技术标签:
【中文标题】Java InputStream 子流。可能吗?【英文标题】:Java InputStream substream. Is it possible? 【发布时间】:2021-12-28 04:23:38 【问题描述】:我有一些InputStream
作为参数:
public byte[] ellipsis(InputStream is)
// some code
我有一些阈值,例如 10_000 字节。
我想做以下事情:
如果InputStream
的大小超过阈值,则需要从传入流中截取消息开头的2/3和结尾的1000字节,并将中间替换为三个点(... ),将其转换为字节数组并返回。
整个问题是我不知道流的长度,直到我阅读它。
也许有办法做到这一点,或者有一些图书馆可以做到这一点?
【问题讨论】:
【参考方案1】:你必须知道:
InputStream
是一个无限流。
InputStream
包含 available()
方法,该方法检索可用的字节数准备就绪(即,如果您在开头调用它,您可以获得流的长度)
坏消息:并非所有InputStream
的实现都支持这种方法,你可以得到0
。
因此,您必须将流读到最后才能找出长度。这是以 100% 的概率做到这一点的一种方法。
【讨论】:
以上是关于Java InputStream 子流。可能吗?的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在 Java 中将字节数组转换为 InputStream 吗?
Java I/O中的InputStream/OutputStream
InputStream.close() 是java中的阻塞调用吗?