当前位置:编程文档 >> JAVA >> PipedInputStream与PipedOutputStream类
首页

PipedInputStream与PipedOutputStream类

所属类别:JAVA
推荐指数:★★★★
文档人气:370
本周人气:6
发布日期:2006-11-30
PipedInputStream类与PipedOutputStream类用于在应用程序中创建管道通信.一个PipedInputStream实例对象必须和一个PipedOutputStream实例对象进行连接而产生一个通信管道.PipedOutputStream可以向管道中写入数据,PipedIntputStream可以读取PipedOutputStream向管道中写入的数据.这两个类主要用来完成线程之间的通信.一个线程的PipedInputStream对象能够从另外一个线程的PipedOutputStream对象中读取数据.
PipedInputStream与PipedOutputStream类的编程实例(两个线程间进行通信的实例程序)
//Sender.java 发送者,这个线程主要用于向另一个线程发送数据

import java.io.*;

public class Sender extends Thread{ //表明是个线程类
private PipedOutputStream out = new PipedOutputStream(); //发送者是要向外面写数据,所以发送者内部创建PipedOutputStream对象用于向外写数据
public PipedOutputStream getOutputStream(){ //返回管道输出流对象
return out;
}
//这是一个线程类,所以它应该覆盖Thread的run方法,run方法在线程类启动时自动运行
public void run(){ //这里的run方法用于向PipedOutputStream中写入一串数据
String strInfo = new String("hello,receiver!");
try{ //write和close方法都可能有异常出现
out.write(StrInfo.getBytes());
out.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}

//Receiver.java //接收者,也是一个线程类

import java.io.*;

public class Receiver extends Thread{
private PipedInputStream in = new PipedInputStream(); //接受者是要读取外面的数据,所以接受者内部创建PipedInputStream对象用于读取外面的数据
public PipedInputStream getInputStream(){ //返回管道输入流对象
return in;
}
//这是一个线程类,所以它应该覆盖Thread的run方法,run方法在线程类启动时自动运行
public void run(){ //这里的run方法用于接收数据
byte[] buf = new byte[1024]; //字节数组
try{ //read和close方法都可能有异常出现
int len = in.read(buf); //读取数据,len表示实际读取到的内容(长度)
System.out.println("the following message comes from sender:\n" = new String(buf ,o,len) );
in.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}


//PipedStreamTest.java //启动类

import java.io.*;

public calss PipedStreamTest{
public static void main(String[] args) throws Exception {
Sender t1 = new Sender(); //创建发送者对象;
Receiver t2 = new Receiver(); //创建接收者对象;

PipedOutputStream out = t1.getOutputStream();
PipedInputStream in = t2.getIntStream();
out.connect(in); //用于连接到PipedInputStream上,与in.connect(out)等价,connect方法有异常出现的可能

t1.start(); //启动线程
t2.start(); //启动线程
}
}
PipedWriter和PipedReader类,它用来处理字符文本的管道通信.
使用管道流类,可以实现名个程序模块之间的松耦合通信,这样我们在程序中就可以灵活的将多个这样的模块的输入流与输出流相联,然后以拼装成满足各种应用的程序,而不用对模块内部进行修改.使用管道连接的模块具有强内聚弱耦合的特点,若模块被替换或被拆卸不会影响到其他的模块.

文档说明:

     

相关文档


读取评论列表……