【发布时间】:2026-02-09 01:25:01
【问题描述】:
我正在将大量数据从 InputStreams 流式传输到 OutputStreams。我使用的方法是这样的:
public static void forwardStream(InputStream in, OutputStream out) throws IOException
{
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
现在我需要在写入流内容之前对其执行搜索/替换操作。将整个流加载到 String 中,然后执行 String.replace() 不是一种选择,因为流数据的大小很大。
我的想法是将 InputStream 包装在某种继承 InputStream 的辅助类中,并在读取其内容时执行替换操作。有没有经过验证的解决方案?
【问题讨论】:
-
问题是,一个 InputStream 是一组字节,所以在你没有读取所有字节之前,你没有“翻译的字符串”。也许您应该尝试调查以读取分块的输入流,但我认为您仍然会遇到同样的问题。像这样的东西。 java2s.com/Code/Java/File-Input-Output/…
-
在流级别上,这是一件很难的事情(做过一次,但非常棘手)。如果你有某种分隔符(即如果这是字符,缓冲每一行,并在一行上执行搜索/替换),它会变得更简单。否则,你必须手动进行,即读取一堆字节,看是否有匹配或部分匹配。如果有部分匹配,请再次阅读,直到您可以决定是否必须替换,然后给您的调用者他请求的字节数,并缓冲您过度阅读的内容...@ArticLord1:这是高度状态。流很难!
标签: java inputstream outputstream