zoukankan      html  css  js  c++  java
  • java中如何将OutputStream转换为InputStream

    在不需要文件生成的情况下,直接将输出流转换成输入流。可使用下面的三种方法:

    如果你曾经使用java IO编程,你会很快碰到这种情况,某个类在OutputStream上创建数据而你需要将它发送给某个需要从输入流读取数据的类。

      你很快会被问道,“java中如何将OutputStream转换为InputStream?”
      方法一:使用字节数组缓存数据
      最简单的方法是用字节数组缓存数据。代码

      ByteArrayOutputStream out = new ByteArrayOutputStream();
      class1.putDataOnOutputStream(out);
      class2.processDataFromInputStream(
      new ByteArrayInputStream(out.toByteArray())
      );
    

      


      于是,OutputStream就被转换为InputStream了。
      方法二:使用管道
      第一种方法的问题是你必须有足够的内存缓存所有数据。你可以使用文件系统缓存更多数据,但无论如何可处理数据的大小还是受到限制。
      解决方法是创建一个线程产生数据到PipedOutputStream。当前线程可从中读取数据。

      PipedInputStream in = new PipedInputStream();
      PipedOUtputStream out = new PipedOutputStream(in);
      new Thread(
      new Runnable(){
      public void run(){
      class1.putDataOnOutputStream(out);
      }
      }
      ).start();
      class2.processDataFromInputStream(in);|||
    

      


      方法三:使用循环缓存区
      方法二中的两个管道流,实际上管理着一个隐藏的循环缓存区。使用一个显式的循环缓存区更易于理解。CircularBuffers 有如下优点
      一个CircularBuffers类而不是两个管道类。
      较于缓存所有数据和额外线程的方法更容易使用。
      你可以更改缓存大小而不必受限于管道缓存区1K的固定缓存大小。
        

      多线程情形:
      CircularByteBuffer cbb = new CircularByteBuffer();
      new Thread(
      new Runnable(){
      public void run(){
      class1.putDataOnOutputStream(cbb.getOutputStream());
      }
      }
      ).start();
      class2.processDataFromInputStream(cbb.getInputStream());
      单线程情形
      // buffer all data in a circular buffer of infinite size
      CircularByteBuffer cbb = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE);
      class1.putDataOnOutputStream(cbb.getOutputStream());
      class2.processDataFromInputStream(cbb.getInputStream());
    

      

  • 相关阅读:
    angular6 增加webpack配置 亲测可用
    Git 忽略提交 .gitignore
    pc 媒体查询
    angular vue通过node启动项目局域网内关闭防火墙无法访问的解决办法
    js判断isNumber(obj)
    hook
    javascript中this的四种用法
    JavaScript中闭包函数
    JavaScript(ES3)中的方法, 及bind apply call的使用
    ES6 箭头函数
  • 原文地址:https://www.cnblogs.com/xiohao/p/5073832.html
Copyright © 2011-2022 走看看