【问题标题】:Combine Multiple InputStreams合并多个 InputStream
【发布时间】:2015-08-18 10:38:22
【问题描述】:

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

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

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

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

Stream One {

}

Stream Two {
    Stream Three {
    }
}

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

【问题讨论】:

  • 你的问题真的不清楚。你是说你的dbConParam.txt 文件不知何故包含三个不同的流?我非常怀疑。
  • 不,我会编辑和清理一下,我有三个不同的 Streams,每个人都会打开一个新的其他 .txt。但要做到这一点,我在顶部的三行中使用不同变量的三倍,我想要做的是一个“全局”流并能够创建它的实例
  • 这是一个非常糟糕的主意。您不希望有任何“全局”变量。为什么不创建一个基于给定参数打开流的方法。
  • 我试过了,但它没有用,或者更好地说,打开流的方法有效,但之后的一切都没有。根本不会保存代码行
  • 那你试错了,还是说我是骗子?它会避免代码重复,让你忘记对全局变量的幻想。

标签: java inputstream bufferedreader writer


【解决方案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!

有时流内部有一个小的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

【讨论】:

  • 所以我做得对,我不应该改变,或者,或者更好地说,我真的不能改变吗?这就是我目前遇到的问题,例如关闭流。
猜你喜欢
  • 2016-12-19
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多