阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第17章: IO操作深入:课时82:管道流
程序员文章站
2022-07-04 19:18:36
...
管道流主要的功能是实现两个线程之间的IO处理操作。
对于管理流也是分为两类:
字节管道流:PipedOutputStream、PipedInputStream;
——连接处理:public void connect(PipedInputStream snk) throws IOException;
字符管道流:PipedWriter、PipedReader;
——连接处理:public void connect(PipedReader snk) throws IOException;
范例:实现管道操作
package cn.mldn.demo;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
SendThread send = new SendThread();
ReceiveThread receive = new ReceiveThread() ;
send.getOutput().connect(receive.getInput()); // 进行管道连接
new Thread(send,"消息发送线程").start();
new Thread(receive,"接收线程").start();
}
}
class SendThread implements Runnable {
private PipedOutputStream output ; // 管道的输出流
public SendThread() {
this.output = new PipedOutputStream(); // 实例化管理输出流
}
@Override
public void run() {
for (int x = 0; x < 10; x++) {
try { // 利用管道实现数据的发送处理
this.output.write(
("【第"+ (x + 1) + "次信息发送- " + Thread.currentThread().getName() + "】www.mldn.cn\n").getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
try {
this.output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public PipedOutputStream getOutput() {
return output;
}
}
class ReceiveThread implements Runnable {
private PipedInputStream input ;
public ReceiveThread() {
this.input = new PipedInputStream() ;
}
@Override
public void run() {
byte data [] = new byte [1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream(); // 所有的数据保存到内存输出流
try {
while((len = this.input.read(data)) != -1) {
bos.write(data,0,len); // 所有的数据保存到内存流
}
System.out.println(" {" + Thread.currentThread().getName() + "接收消息} \n " + new String(bos.toByteArray()));
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
this.input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public PipedInputStream getInput() {
return input;
}
}
管道就类似于医院打点滴效果,一个只是负责发送,一个负责接收,中间靠一个管道连接。
推荐阅读
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第22章:反射应用案例:课时101:反射实例化对象
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时111:单级属性赋值
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第18章: 输入与输出支持:课时84:打印流
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第22章:反射应用案例:课时102:反射与工厂设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第16章:字节流与字符流:课时75:Writer字符输出流
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第17章: IO操作深入:课时83:RandomAccessFile
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第26章:反射与代理设计模式:课时118:动态代理设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第23章:反射与类操作:课时105:反射调用构造方法(含关系图-重要)
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第17章: IO操作深入:课时82:管道流
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第25章:ClassLoader类加载器:课时115:ClassLoader类加载器简介