【问题标题】:Is there an easy way to create a Java InputStream that consists of several appended files?有没有一种简单的方法来创建一个包含多个附加文件的 Java InputStream?
【发布时间】:2009-06-04 19:34:09
【问题描述】:

我有一个“处理器”组件,可以处理单个文件、InputStream、Reader 等。

由于各种原因,我最终得到了几个大文件而不是一个大文件。

有没有办法构造一个输入流(或阅读器):透明地“附加”所有这些文件,以便: 1)“处理器”不知道一个文件从哪里开始或另一个文件在哪里结束 2)文件系统中没有发生变化(例如,没有实际附加文件) 3) 每个文件都是按顺序读取的,这样我就不用支付将它们全部加载到内存并在处理器开始读取之前附加它们的成本?

我确信可以写出这样的东西,但我想知道是否已经存在;自从我做基于文件的 IO 以来已经有一段时间了。

【问题讨论】:

    标签: java io


    【解决方案1】:

    SequenceInputStream 连接多个流。

    List<InputStream> opened = new ArrayList<InputStream>(files.size());
    for (File f : files) 
      opened.add(new FileInputStream(f));
    InputStream is = new SequenceInputStream(Collections.enumeration(opened));
    

    打开每个文件时的异常处理(未显示)很重要;确保所有文件最终都一定会关闭,即使在创建 SequenceInputStream 之前中止操作。

    【讨论】:

    • 该死的,我对 Piped 流很熟悉,不知道有这个,应该好好看看。谢谢!
    【解决方案2】:

    您可以使用SequenceInputStream 之类的东西来读取一个接一个的流。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 2016-02-16
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      相关资源
      最近更新 更多