Java-I/O操作中管道流的使用
本文最后更新于:1 年前
1-首先需要导入三个包
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
2- 我们需要编写两个进行对话的线程类
2.1 - 发送消息的线程类 Sender
class Sender extends Thread{
private PipedOutputStream out = new PipedOutputStream();
public PipedOutputStream getOutputStream(){return out;}
@Override
public void run(){
String s = new String("Receiver, 你好!");
try {
out.write(s.getBytes()); // 写入(发送)
out.close();
}catch (IOException e){
System.out.println(e.getMessage());
}
}
}
2.2 - 接收消息的线程类 Receiver
class Receiver extends Thread{
private PipedInputStream in = new PipedInputStream();
public PipedInputStream getInputStream(){return in;}
@Override
public void run(){
String s = null;
byte[] buf = new byte[1024];
try {
int len = in.read(buf); // 读出信息
s = new String(buf, 0, len);
System.out.println("收到了以下信息: " + s);
in.close();
}catch (IOException e){
System.out.println(e.getMessage());
}
}
}
声明的字节数组大小为1024原因是:类PipedInputStream运用的是一个1024字节固定大小的循环缓冲区。实际上,写入PipedOutputStream的数据保存到对应的PipedInputStream的内部缓冲区。
3 - 进行管道流测试的主类(管道流的使用)
public class PipeStreamDemo {
public static void main(String[] args) {
try {
Sender sender = new Sender(); // 创建线程对象sender
Receiver receiver = new Receiver(); // 创建线程对象receiver
PipedOutputStream out = sender.getOutputStream(); // 写入
PipedInputStream in = receiver.getInputStream(); // 读出
out.connect(in); // 将输出发送到输入
sender.start(); // 启动线程
receiver.start();
}catch (IOException e){
System.out.println(e.getMessage());
}
}
}
4 - 输出示例
收到了以下信息: Receiver, 你好!
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!