【问题标题】:Can java streams be chained without using only the constructors?可以在不使用构造函数的情况下链接 java 流吗?
【发布时间】:2013-01-25 09:07:30
【问题描述】:

我知道有一种方法可以通过使用以下构造函数来链接流:

BufferedReader bf=new BufferedReader(new InputStreamReader(io.openStream()));

但是,还有其他方法吗?

SetSink/SetProcess();

也许?

谢谢。

【问题讨论】:

  • 为什么要避免使用构造函数?
  • 我没有,只是想知道这是否可能。一个原因可能是我已经构建了一个非常长的链,并且只想将接收器流更改为末端,而不是构建一个新的。

标签: java stream constructor-chaining


【解决方案1】:

因为你不能在没有东西包装的情况下使用包装的 Stream,所以答案是

a) 不,你不能和

b) 你不会想要的。

一个原因可能是我已经构建了一个非常长的链,并且只想将接收器流更改为末端,而不是构建一个新的。

在这种情况下,您可以使用中间变量,例如

InputStream in = new FileInputStream(filename);
if (filename.endsWith(".gz"))
    in = new GZIPInputStream(in);
in = new BufferedInputStream(in);
if (objectStream)
   return new ObjectInputStream(in);
return DataInputStream(in);

【讨论】:

  • 正如我上面评论的那样,如果我为文件 X 构建了一个长链,并且在完成 X 后我希望文件 Y 也一样,那么没有办法使用已经构建的链吗?太糟糕了:(谢谢
  • 链不要求全部在一行或仅在一种组合中。见上文。
【解决方案2】:

如果您查看 BufferedReader class 的 javadoc,构建它的唯一方法是在构造函数中传递一个 reader。

有什么理由不使用构造函数?

【讨论】:

  • 是的,我查看了 javadoc,我注意到这是唯一的方法。但我想知道这样做是否有更高的路径。 (比如使用 Reader 超类等)
猜你喜欢
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 2016-11-04
  • 2016-08-10
  • 2010-09-23
  • 1970-01-01
相关资源
最近更新 更多