java管道通信

本文介绍Java中管道通信的实现方式,包括PipedInputStream/PipedOutputStream及PipedReader/PipedWriter的使用示例。通过两个线程间的数据传递演示了基本原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java提供管道功能,实现管道通信的类有两组:PipedInputStream和PipedOutputStream或者是PipedReader和PipedWriter。管道通信主要用于不同线程间的通信。

一个PipedInputStream实例对象必须和一个PipedOutputStream实例对象进行连接而产生一个通信管道。PipedOutputStream向管道中写入数据,PipedIntputStream读取PipedOutputStream向管道中写入的数据。一个线程的PipedInputStream对象能够从另外一个线程的PipedOutputStream对象中读取数据。

PipedInputStream和PipedOutputStream实例

//Sender类

package pipeCommu;

import java.io.PipedInputStream;

import java.io.PipedOutputStream;

public class Sender extends Thread{

private PipedOutputStream out=new PipedOutputStream();//发送者创建PipedOutputStream向外写数据;

public PipedOutputStream getOut(){

return out;

}

public void run(){

String strInfo="hello,receiver";

try{

out.write(strInfo.getBytes());//写入数据

out.close();

}catch(Exception e){

e.printStackTrace();

}

}

}

//Reader类,负责接收数据

package pipeCommu;

import java.io.PipedInputStream;

public class Reader extends Thread{

private PipedInputStream in=new PipedInputStream();//发送者创建PipedOutputStream向外写数据

public PipedInputStream getIn(){

return in;

}

public void run(){

byte[] buf=new byte[1024];//声明字节数组

try{

int len=in.read(buf);//读取数据,并返回实际读到的字节数

System.out.println("receive from sender:"+new String(buf,0,len));

in.close();

}catch(Exception e){

e.printStackTrace();

}

}

}
package pipeCommu;

import java.io.*;

public class PipedStream {

public static void main(String[] args) throws Exception{

Sender send=new Sender();

Reader read=new Reader();

PipedOutputStream out=send.getOut();

PipedInputStream in=read.getIn();

out.connect(in);//或者也可以用in.connect(out);

send.start();

read.start();

}

}


PipedReader和PipedWriter

package pipeCommu;

import java.io.*;

public class PipedCommu {

public static void main(String[] args) {

// TODO Auto-generated method stub

try{

PipedReader reader=new PipedReader();

PipedWriter writer=new PipedWriter(reader);

Thread a=new Send(writer);

Thread b=new Read(reader);

a.start();

Thread.sleep(1000);

b.start();

}catch(IOException e){

e.printStackTrace();

}catch(InterruptedException e1){

e1.printStackTrace();

}

}

}

class Send extends Thread{

PipedWriter writer;

public Send(PipedWriter writer){

this.writer=writer;

}

public void run(){

try{

writer.write("this is a.hello world".toCharArray());

writer.close();

}catch(IOException e){

e.printStackTrace();

}

}

}

class Read extends Thread{

PipedReader reader;

public Read(PipedReader reader){

this.reader=reader;

}

public void run(){

System.out.println("this is B");

try{

char[] buf=new char[1000];

reader.read(buf,0,100);

System.out.println(new String(buf));

}catch(Exception e){

e.printStackTrace();

}

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值