【问题标题】:Java InputStream substream. Is it possible?Java InputStream 子流。可能吗?
【发布时间】:2021-12-28 04:23:38
【问题描述】:

我有一些InputStream 作为参数:

public byte[] ellipsis(InputStream is) {

  // some code
}

我有一些阈值,例如 10_000 字节。

我想做以下事情:

如果InputStream的大小超过阈值,则需要从传入流中截取消息开头的2/3和结尾的1000字节,并将中间替换为三个点(... ),将其转换为字节数组并返回。

整个问题是我不知道流的长度,直到我阅读它。

也许有办法做到这一点,或者有一些图书馆可以做到这一点?

【问题讨论】:

    标签: java inputstream


    【解决方案1】:

    你必须知道:

    1. InputStream 是一个无限流。
    2. InputStream 包含 available() 方法,该方法检索可用的字节数准备就绪(即,如果您在开头调用它,您可以获得流的长度)
    3. 坏消息:并非所有InputStream 的实现都支持这种方法,你可以得到0

    因此,您必须将流读到最后才能找出长度。这是以 100% 的概率做到这一点的一种方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-07
      • 2013-08-26
      • 2017-08-15
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      相关资源
      最近更新 更多