组合多个输入流

Combine Multiple InputStreams

我的问题可能非常基础,但我找不到可行的解决方案。

在我的代码中,我有三个新的 InputStreams。

InputStream fstream = WasuTimeTool.class.getResourceAsStream("/resources/dbConParam.txt");
BufferedReader dbParamReader = new BufferedReader(new InputStreamReader(fstream));
String dbParamLine;

就这么简单。除了 InputStreamString 和变量之外,每个人都是一样的。他们是这样建造的:

Stream One {

}

Stream Two {
    Stream Three {
    }
}

当我构建一个全局流时,我在使用变量以及第二个和第三个流的冲突时遇到了一些问题。是否有解决方案来获得一个流并创建新实例,或者它们应该保留为三个不同的流?

InputStream fstream = WasuTimeTool.class.getResourceAsStream("/resources/dbConParam.txt");
BufferedReader dbParamReader = new BufferedReader(new InputStreamReader(fstream));
String dbParamLine;

更像是

Stream one{
   Stream two{
       Stream three{
       }
   }
}

这是正确的,可以

记住:关闭 BufferedReader(又名 Stream one)也会关闭 InputStreamReader 和 InputStream!

有时 Streams 内部有一个小 cache。为了尊重这种行为,您应该使用具有最抽象级别的 Stream,BufferedReader 在您的示例中如此遥远。

例子

如果你有这个文件:

Hello
Friend

并且您使用 InputStream 读取 Hello\nFri,然后如果您使用 BufferedReader 中的 readLine,您将变成 end。这很糟糕,因为它不是我们从方法 readLine!

接受的整行

解决方案

你应该这样做:

BufferedReader dbParamReader = new BufferedReader(new InputStreamReader(WasuTimeTool.class.getResourceAsStream("/resources/dbConParam.txt")));
String dbParamLine;

所以没有人会受骗直接使用 InputStream