1

分析器类的列表,用于分析 InputStream 的依赖关系,更改一些内容并将其写入 OutputStream:

public Set<Dependency> analyse(InputStream i, OutputStream o);

分析器应该像这样链接:

for(DocumentAnalyser analyser : a) {
 o.getDependencies().addAll(analyser.analyse(in, out));
 in = new ByteArrayInputStream(out.toByteArray());
} 

现在我在一个最终的环境中工作。

  1. 有没有更好的方法来“链接”流?
  2. 使用 ByteArrayInputStream 从“出”到“入”的“交换”操作是否昂贵?
  3. 如何处理“in”为final的问题?
4

2 回答 2

1
  1. 使用辅助线程和java.io.PipedInputStream/java.io.PipedOutputStream对。
  2. 可能它在大流上表现不佳。
  3. 正如在另一个响应中所说,使用本地非最终变量进行链接

请注意,通过应用 1. 您无需担心 2,因为您实际上是在管道传输流。

于 2010-11-19T14:41:34.710 回答
1

对于问题 2。
我将提供我自己的子类,它可以直接访问 ByteArrayInputStream 和 ByteArrayOutputStream 的缓冲区。这样,您就不会因为在toByteArray.

对于问题 3。
将其分配给本地非最终变量,

InputStream nonFinalIn = in;
for(DocumentAnalyser analyser : a) {
 o.getDependencies().addAll(analyser.analyse(nonFinalIn, out));
 nonFinalIn = new ByteArrayInputStream(out.toByteArray());
}

但请注意,原件in将不再有效(它将位于流的末尾)

于 2010-11-19T14:15:40.323 回答