Java I/O流 - 管道流
2021/4/8 1:08:28
本文主要是介绍Java I/O流 - 管道流,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java I/O流 - 管道流
管道流主要用来实现线程之间的通信。在使用管道流的时候,输入流和输出流需要并用,即在使用管理流时两者必须进行连接。通常,由某个线程将数据写入到相应的 PipedOutputStream 中,其他线程从 PipedInputStream 中读取数据。
PipedStream 实现线程传输数据示意(PipedStreamTest)
功能描述:定义一个接受方 Sender 和 发送方 Receiver,然后通过建立好的管道实现线程之间的通信
// 发送端线程 class Sender implements Runnable { private PipedOutputStream output = null; // 用来连接发送端的管道 public Sender(PipedOutputStream output) { this.output = output; // 连接发送管道 } @Override public void run() { String content = "我是要传送的内容"; // 传输的数据 try { output.write(content.getBytes()); // 将数据写入发送端 output.close(); // 关闭管道输出流 } catch (IOException e) { e.printStackTrace(); } System.out.println("发送方发送信息完成!"); } } // 接收方线程 class Receiver implements Runnable { private PipedInputStream input = new PipedInputStream(); // 用来连接接受端的管道 public PipedInputStream getInput() { return input; // 传递输入管道给发送方连接 } @Override public void run() { byte[] bytes = new byte[1024]; try { int nums = input.read(bytes); // 取得输入端输入的信息 input.close(); // 关闭输入管道流 if (nums == -1) { System.out.println("接受端接收的内容为空!"); } else { System.out.println("接受端接收的内容为: " + new String(bytes, 0, nums) + "!"); } } catch (IOException e) { e.printStackTrace(); } } } public class PipedStreamTest { public static void main(String[] args) throws IOException { // 建立管道的输入与输出流 PipedInputStream input = new PipedInputStream(); PipedOutputStream output = new PipedOutputStream(); // 建立输出端和接收端的线程 Sender sender = new Sender(output); // 将输出管道连通发送方的输出流 Receiver receiver = new Receiver(); input = receiver.getInput(); // 将输入管道连通接受方的输入流 // 连接输入输出管道 output.connect(input); // 运行输入输出端 new Thread(sender).start(); new Thread(receiver).start(); } }
小结:
-
管道流传递数据的是字节流
-
管道流就像一条线一样,将两个无关的线程连接起来,使双方可以输送数据
-
无论 CUP 如何调度,连接了输入输出管道的线程,
一定是发送方线程先完成后,接受方线程才能开始运行
这篇关于Java I/O流 - 管道流的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?