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中的阻塞调用吗?

java里面InputStream类型转换成String类型怎么实现

面试必备:详解Java I/O流,掌握这些就可以说精通了?

详解 Java I/O 与装饰者模式