2

我想写一段 java 来为 inputstream 添加页眉和页脚。

public static InputStream enrichInputStream(InputStream is,
                                            String header,
                                            String footer) {
   ...
}

想象一下,您有一个输入流,您可以从中获得:“这里有一些数据”

那么如果我打电话

enrich(is,"my-header","my-footer")

我会得到

my-headerHERE IS SOME DATAmy-footer

这是可行的吗?有人可以草拟一个解决方案吗?

ps注意:输入流可能非常大,因此将原始InputSTream的页眉+内容+页脚组合在一起不是一个好的解决方案......

4

3 回答 3

3

SequenceInputStream 如何将您的页眉、正文和页脚连接在一起。

请参见此处:如何将多个不同的输入流链接到一个输入流中

于 2013-08-09T16:25:46.990 回答
2

根据问题的要求,解决方案草图:创建您自己的类,EnrichedInputStream,继承自 InputStream。

  1. 记住构造函数调用中的页眉、页脚和原始流,它具有这三个作为参数。
  2. 有一个或多个实例变量显示状态(页眉中的位置、原始流中的位置、页脚中的位置。
  3. 改写 read 函数首先传递 header,结束后传递原始流的 contentz,结束后传递 footer。这将利用上述实例变量。
于 2013-08-09T16:20:42.020 回答
1

你不能用你通过方法调用描述的方式来做到这一点。您必须编写页眉,然后是数据,然后是页脚。

您需要通过扩展FilterInputStream或为输出创建过滤流,FilterOutputStream.

然后,您可以覆盖方法,例如read(为了首先读取标题。

对于输出,这有点容易。只需在打开流时写入标题并close(在关闭之前覆盖以写入页脚。

于 2013-08-09T16:18:52.183 回答