`

PipedInputStream与PipedOutputStream类

阅读更多
转http://tzj163.blog.163.com/blog/static/1096116792010550539756/ 
PipedInputStream类与PipedOutputStream类用于在应用程序中创建管道通信.一个PipedInputStream实例对象必须和一个PipedOutputStream实例对象进行连接而产生一个通信管道.PipedOutputStream可以向管道中写入数据,PipedIntputStream可以读取PipedOutputStream向管道中写入的数据.这两个类主要用来完成线程之间的通信.一个线程的PipedInputStream对象能够从另外一个线程的PipedOutputStream对象中读取数据.

   PipedInputStream与PipedOutputStream类的编程实例(两个线程间进行通信的实例程序)
import java.io.IOException;
import java.io.PipedOutputStream;

public class Producer extends Thread {
	//生产者是要向外面写数据,所以生产者内部创建PipedOutputStream对象用于向外写数据
	private PipedOutputStream out = new PipedOutputStream();
	public PipedOutputStream getOutPutStream()
	{
		return out;
	}
	@Override
	public void run() {
		String info = "Hello Producer!";
		try {
			out.write(info.getBytes());
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
}


import java.io.IOException;
import java.io.PipedInputStream;

public class Comsumer extends Thread {
	//消费者是要读取外面的数据,所以消费者内部创建PipedInputStream对象用于读取外面的数据
	private PipedInputStream input =new PipedInputStream();
	public PipedInputStream getInputStream()
	{
		return input;
	}
	@Override
	public void run() {
		byte[] bytes = new byte[1024];
		try {
			int len = input.read(bytes);
			System.out.println("the following message comes from Producer:\n" +new String(bytes ,0,len) );
			input.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
	
}

import java.io.IOException;

public class PipedStreamTest {
	public static void main(String[] args) {
		Producer producer = new Producer();
		Comsumer com = new Comsumer();
		try {
			//用于连接到PipedInputStream上,与in.connect(out)等价,connect方法有异常出现的可能
			producer.getOutPutStream().connect(com.getInputStream());
			producer.start();
			com.start();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}
}


  PipedWriter和PipedReader类,它用来处理字符文本的管道通信.

使用管道流类,可以实现名个程序模块之间的松耦合通信,这样我们在程序中就可以灵活的将多个这样的模块的输入流与输出流相联,然后以拼装成满足各种应用的程序,而不用对模块内部进行修改.使用管道连接的模块具有强内聚弱耦合的特点,若模块被替换或被拆卸不会影响到其他的模块.

通常,数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的 PipedOutputStream。不建议对这两个对象尝试使用单个线程,因为这样可能死锁线程。
分享到:
评论

相关推荐

    PipedInputStream和PipedOutputStream_动力节点Java学院整理

    PipedInputStream和PipedOutputStream_动力节点Java学院整理

    详解PipedInputStream和PipedOutputStream_动力节点Java学院整理

    PipedOutputStream的connect方法用于将PipedOutputStream与PipedInputStream连接起来。在连接过程中,它会检查PipedInputStream是否已经连接,如果已经连接,那么将抛出IOException。如果PipedInputStream为空,那么...

    JAVA经典教材笔记

    - PipedInputStream与PipedOutputStream类。 - **打印流** - 打印流的特点:简化输出操作。 - PrintStream类与PrintWriter类。 - **System类对IO的支持** - System类的in、out、err流:标准输入输出。 - 使用...

    管道流PipedStream应用举例

    针对java中的管道流的应用的解析,包括PipedInputStream和PipedOutputStream。

    JAVA_管道流

    首先,我们来了解一下PipedInputStream和PipedOutputStream这两个类。PipedInputStream是一个输入流,它接收从PipedOutputStream写入的数据。而PipedOutputStream则是一个输出流,它将数据写入到与之连接的...

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、FileOutputStream、InputStreamReader、...PipedReader、PipedWriter、PipedInputStream、PipedOutputStream...

    举例讲解Java中Piped管道输入输出流的线程通信控制

    Sender线程则是数据的发送方,创建了PipedOutputStream,并将其与Receiver的PipedInputStream连接起来。Sender通过写入数据到PipedOutputStream,数据就会自动流转到Receiver的PipedInputStream中,从而实现了线程间...

    JAVA管道流.pdf

    PipedInputStream是一个输入流,它可以从与之相连的PipedOutputStream获取数据。PipedOutputStream则是输出流,用于写入数据到PipedInputStream。通过将System.out和System.err的打印流替换为PipedOutputStream,...

    Java io的基本操作很全面的代码呀

    - 管道流的使用:创建两个线程,一个负责写数据,一个负责读数据,通过PipedInputStream和PipedOutputStream实现线程间的数据传递。 此外,Java NIO(New IO)也是值得了解的一部分,它是Java 1.4引入的新特性,...

    Java管道流.pdf

    1. 管道输出流(PipedOutputStream)与管道输入流(PipedInputStream) PipedOutputStream是OutputStream的直接子类,负责向管道中写入字节数据;而PipedInputStream是InputStream的直接子类,负责从管道中读取字节...

    JAVA_IO详解_包括讲解IO中各种流及其用法.pdf

    PipedInputStream和PipedOutputStream是用于线程之间数据通信的管道流。它们可以用于在多个线程之间发送或接收数据。 SequenceInputStream可以把多个输入流当作一个连续的输入流来读取,使程序可以顺序地读取多个...

    一个输入流写到多个输出流

    1. **管道流(PipedInputStream 和 PipedOutputStream)**:Java提供了一种简单的机制,即管道流,可以直接将一个流的输出连接到另一个流的输入。通过创建PipedInputStream和PipedOutputStream对象,并将它们相互...

    Java IO 工具类大全

    十五、PipedInputStream和PipedOutputStream 这两个类用于在不同线程间传递数据,常用于构建管道模型。 以上就是Java IO工具类的详细介绍,理解并熟练运用这些工具,将极大提升你在处理数据输入输出时的效率和灵活...

    第8章JavaIO第8章JavaIO第8章JavaIO第8章JavaIO第8章JavaIO第8章JavaIO

    PipedInputStream和PipedOutputStream支持线程间通信;ByteArrayInputStream和ByteArrayOutputStream则允许在内存中读写数据。 8.2 标准IO Java通过System类提供标准输入、输出和错误流,分别对应于System.in、...

    java程序设计习题及答案 (1).docx

    文件流是用于读写文件的流,对象流允许序列化和反序列化对象,而多线程间通信可以使用PipedInputStream和PipedOutputStream。 2. **非字符输出流**:这些是OutputStream类的子类,如System.out.println()使用的...

    Java7课后习题.pdf

    - PipedInputStream和PipedOutputStream用于线程间通信,数据可以从一个线程写入PipedOutputStream,另一个线程从PipedInputStream读取。 - FilterInputStream作为抽象类,用于构建处理流,DataInputStream是它的...

    管道流说明和例子,例子很详细的

    它由`PipedInputStream`和`PipedOutputStream`组成。其中`PipedOutputStream`用于写入数据,而`PipedInputStream`则用于读取这些数据。 - **工作原理**: - 当一个线程通过`PipedOutputStream`写入数据时,这些数据...

    java IO类学习一点通

    - PipedInputStream和PipedOutputStream:用于线程间通信,一个线程写入,另一个线程读取。 9. 序列化流: - ObjectInputStream和ObjectOutputStream:用于处理序列化对象的输入和输出。 10. NIO(New Input/...

Global site tag (gtag.js) - Google Analytics