【问题标题】:Java: Write to OutputStream and then use it as InputStreamJava:写入 OutputStream,然后将其用作 InputStream
【发布时间】:2015-09-16 10:30:13
【问题描述】:

我想从远程存储中获取一个文件作为 InputStream 而不将其保存到本地文件系统。远程存储为 Java API 提供了一个获取 OutputStream 并将文件数据转储到其中的方法。

void dump(OutputStream dest);

我想出的简单方法是创建一个临时文件,将数据转储到其中,然后将其作为 InputStream 重新打开。但是这种方法会创建一个临时文件。有没有一种简单的方法可以在没有代理文件的情况下实现相同的结果?

【问题讨论】:

    标签: java stream inputstream outputstream


    【解决方案1】:

    两种选择:

    内存

    如果有问题的“文件”足够小,可以使用,您可以将数据读入ByteArrayOutputStream,然后使用其toByteArray 方法构造ByteArrayInputStream 进行读取。

    管道

    为避免在内存中存储不必要的内容,您可以使用PipedOutputStreamPipedInputStream

    PipedOutputStream:

    可以将管道输出流连接到管道输入流以创建通信管道。管道输出流是管道的发送端。通常,数据由一个线程写入PipedOutputStream 对象,数据由其他线程从连接的PipedInputStream 读取。

    PipedInputStream:

    管道输入流应该连接到管道输出流;然后,管道输入流提供写入管道输出流的任何数据字节。通常,数据由一个线程从 PipedInputStream 对象中读取,数据由其他线程写入相应的 PipedOutputStream。

    您将输出流提供给 API,然后从输入流中读取。

    【讨论】:

      猜你喜欢
      • 2012-04-30
      • 2011-10-19
      • 1970-01-01
      • 2018-12-12
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2013-06-03
      相关资源
      最近更新 更多