`
palwang
  • 浏览: 51367 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

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());
分享到:
评论

相关推荐

    将输出流OutputStream转化为输入流InputStream的方法

    在Java编程中,有时我们可能需要将一个已经写入数据的`OutputStream`转换为`InputStream`,以便重新读取这些数据。这种情况通常出现在临时存储或处理数据时,例如在网络传输或者存储到内存中的场景。本篇文章将深入...

    InputStream与OutputStream及File间互转

    一种常见的方法是先将`OutputStream`的数据写入内存中的`ByteArrayOutputStream`,然后再将其转换为`InputStream`: ```java ByteArrayOutputStream baos = new ByteArrayOutputStream(); OutputStream out = ...

    Java String与Byte类型转换

    - **使用OutputStream**: 如果要将字符串写入输出流,可以先将字符串转换为字节数组,然后通过`OutputStream.write(bytes)`方法发送到流中。 2. **Byte转String**: - **字节数组转换**: 使用`new String(bytes)`...

    用java实现的视频转换器

    7. **文件IO操作**:在读取和写入视频文件时,Java的File类和InputStream/OutputStream类是必不可少的。开发者需要确保正确地读取输入文件,并将转换后的视频数据写入到指定的输出文件。 8. **异常处理**:在处理...

    使用XStream是实现XML与Java对象的转换(5)--Object Stream

    在XML和Java对象转换的上下文中,Object Stream可能是指将Java对象写入OutputStream或者从InputStream读取,这是Java标准I/O的一部分。XStream允许开发者将复杂的Java对象层次结构轻松地转换成XML,反之亦然,而无需...

    java-0126递归&过滤器(listFiter)&InputStream&OutputStream

    InputStream 和 OutputStream InputStream 是一种输入流,用于读取数据。InputStream 可以用来读取文件、网络数据等。 OutputStream 是一种输出流,用于写入数据。OutputStream 可以用来写入文件、网络数据等。 ...

    java 中InputStream,String,File之间的相互转化对比

    将InputStream转化为String,一般使用BufferedReader读取InputStream中的每一行并拼接到StringBuffer中,最后返回其toString()的结果。另外,也可以通过ByteArrayOutputStream来读取InputStream,然后将其转换为...

    Java实现字节流与图片的转化

    如果需要在程序中操作图片,可以使用Java的`javax.imageio`包中的`ImageIO`类将字节流转换为`BufferedImage`对象: ```java BufferedImage image; try (InputStream is = new ByteArrayInputStream(imageData))...

    java视频格式转换

    4. **视频流处理**:在Java中处理视频流,可能需要用到IO流,如InputStream和OutputStream,来读取和写入视频数据。 5. **视频参数调整**:在转换过程中,我们可能需要根据需求调整视频的分辨率、比特率、帧率等...

    Java中的字符集编码入门(五)Java代码中的字符编码转换Part1.pdf

    Java的IO系统在此起到了关键作用,它分为面向字节的流(如InputStream和OutputStream)和面向字符的流(如Reader和Writer)。 面向字节的流处理原始的二进制数据,不进行任何字符编码转换,适用于处理如图像、音频...

    java转换成word

    6. **Java I/O和文件操作:** 在进行文件转换时,了解Java的文件读写操作至关重要,包括File类、InputStream和OutputStream的使用。 7. **模板技术:** 为了更高效地生成Word文档,开发者可能会使用模板技术,如...

    从DELPHI到JAVA转换.pdf

    在 DELPHI 中,文件操作是通过 TFileStream 来实现的,而在 JAVA 中,则是通过 InputStream/OutputStream 和 RandomAccessFile 来实现的。 目录操作 在 DELPHI 中,目录操作是通过 FindFirst 等来实现的,而在 ...

    java_io.pdf

    InputStreamReader和OutputStreamWriter是两个关键的转换器,分别将InputStream和OutputStream转换为Reader和Writer,以支持字符流操作。Reader和Writer的使用通常是首选,因为它们能更好地处理国际化的字符编码。 ...

    Java中的字符集编码入门(五)Java代码中的字符编码转换Part1.doc

    相反,`OutputStreamWriter`是`Writer`的子类,它接收`OutputStream`,并将字符流转换为字节流,写入到输出流中。同样,我们需要指定编码: ```java OutputStream out = new FileOutputStream("output.txt"); ...

    txt转java之转换器

    7. **文件I/O操作**:在Java中,处理文件需要使用I/O流(InputStream和OutputStream)或者BufferedReader和PrintWriter等类。转换器会读取txt文件,然后写入相应的Java代码。 8. **编码处理**:考虑到txt文件可能...

    Java字符编码转换过程说明

    Java提供了`InputStream`和`OutputStream`处理原始字节流,而`Reader`和`Writer`则用于处理字符流,它们负责将字节转换为字符或将字符转换为字节。在处理汉字时,推荐使用`FileReader`和`FileWriter`,它们会按照...

    Java源码编码转换器 GBK TO UTF8 UTF8 To GBK(无源码)

    Java源码编码转换器是一款实用工具,主要用于将Java源代码文件从GBK编码转换为UTF-8编码,或者从UTF-8编码转换为GBK编码。在软件开发过程中,尤其是在处理中文字符时,编码问题是一个常见的挑战。GBK是中文环境下...

    基于Java的万能转换器.zip

    1. **IO流**:Java的InputStream和OutputStream类用于读写文件,InputStreamReader和OutputStreamWriter则用于处理字符流,配合BufferedReader和BufferedWriter可以高效地读写大文件。 2. **文件操作**:File类提供...

    Java中的字符集编码入门(五)Java代码中的字符编码转换Part1[参考].pdf

    Java的IO系统是基于流模型的,分为面向字节的InputStream/OutputStream和面向字符的Reader/Writer。这两种类型的流在处理数据时遵循不同的原则。面向字节的流直接操作原始的字节数据,不做任何字符编码转换,适合...

Global site tag (gtag.js) - Google Analytics