组合多个InputStream

时间:2015-08-18 10:38:22

标签: java inputstream bufferedreader writer

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

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

<script type="text/javascript">
  $(function() {
    $('#datetimepicker1').datepicker()({
    });
  });
</script>

这很简单。 InputStreamString和变量旁边的每个人都是一样的。他们是这样构建的:

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

当我构建全局Streams时,我遇到了使用变量和第二个和第三个流的冲突的问题。有没有一个解决方案可以获得一个单一的流并创建新的实例,还是应该保持三个不同的流?

1 个答案:

答案 0 :(得分:1)

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

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

解决方案

你应该这样做:

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

因此,没有人可以直接使用InputStream