java – 从OutputStream创建InputStream的最有效的方法

本页:http://blog.ostermiller.org/convert-java-outputstream-inputstream
描述如何从OutputStream创建一个InputStream:

new ByteArrayInputStream(out.toByteArray())

其他选择是使用PipedStreams和新线程是繁琐的。

我不喜欢将许多兆字节复制到新的内存字节数组中。
有没有一个图书馆这样更有效?

编辑:

根据Laurence Gonsalves的建议,我试过PipedStreams,结果是,他们不是那么难处理。
下面是clojure中的示例代码:

(defn #^PipedInputStream create-pdf-stream [pdf-info]
  (let [in-stream (new PipedInputStream)
        out-stream (PipedOutputStream. in-stream)]
    (.start (Thread. #(;Here you write into out-stream)))
    in-stream))
如果你不想将所有的数据全部复制到一个内存中的缓冲区,那么你将不得不让你的代码使用OutputStream(生产者)和使用InputStream的代码(消费者)在同一线程中交替,或者在两个单独的线程中同时操作。让它们在同一个线程中操作可能要复杂得多,使用两个单独的线程,是更容易出错(你需要确保消费者从不阻止等待输入,或者你会有效地死锁),并需要让生产者和消费者在同一个循环中运行,似乎太紧耦合。

所以使用第二个线程。这真的不是那么复杂。您链接到的页面有一个完美的例子:

  PipedInputStream in = new PipedInputStream();
  PipedOutputStream out = new PipedOutputStream(in);
  new Thread(
    new Runnable(){
      public void run(){
        class1.putDataOnOutputStream(out);
      }
    }
  ).start();
  class2.processDataFromInputStream(in);
http://stackoverflow.com/questions/1225909/most-efficient-way-to-create-inputstream-from-outputstream

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 从OutputStream创建InputStream的最有效的方法