Java 组合多个输入流

Java 组合多个输入流,java,inputstream,bufferedreader,writer,Java,Inputstream,Bufferedreader,Writer,我的问题可能是一些非常基本的问题,但我无法找到有效的解决方案 在我的代码中,我有三个新的输入流 InputStream fstream = WasuTimeTool.class.getResourceAsStream("/resources/dbConParam.txt"); BufferedReader dbParamReader = new BufferedReader(new InputStreamReader(fstream)); String dbParamLine; 就这么简单。除

我的问题可能是一些非常基本的问题,但我无法找到有效的解决方案

在我的代码中,我有三个新的输入流

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

有时流内部有一个小的
缓存
。为了尊重这种行为,您应该使用最抽象级别的流,在您的示例中是
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

你的问题真的不清楚。您是说您的
dbConParam.txt
文件以某种方式包含三个不同的流吗?我对此非常怀疑。不,我会编辑并清理一下,我有三个不同的流,每个人都会打开一个新的other.txt。但要做到这一点,我在顶部有三行不同的变量,我想做的是一个“全局”流,并且能够创建实例,这是一个非常糟糕的想法。你不想有任何“全局”变量。为什么不创建一个基于给定参数打开流的方法呢?我试过了,但是没有用,或者更好的说法是,打开流的方法可以工作,但是之后的一切都不行。根本不会保存代码行然后你尝试了错误,或者你声称我是个骗子?这将避免代码重复,让你忘记梦见全局变量。所以我做得对,我不应该改变,或者更好地说,我不能真的改变它?这就是我到目前为止遇到的问题,例如关闭流。