• Java 管道PipedInputStream PipedOutStream PipedReader PipedWriter


    java中的管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另外一个线程从输入管道中读取数据。通过使用管道,实现不同线程间的通信,而不必借助类似临时文件之类的东西。jdk提供4个类来使线程建可以进行通信。

    (1)PipedInputStream与PipedOutputStream

    (2)PipedReader与PipedWriter

    PipedInputStream in = new PipedInputStream()

    PipedOutStream out = new PipedOutStream()

    in.connect(out)

    //等同于out.connect(in)

    管道输入流与管道输出刘是一一对应关系,如果说一对多或者多对对会报错

    java.io.IOException: Already connected
        at java.io.PipedOutputStream.connect(PipedOutputStream.java:100)
        at java.io.PipedInputStream.connect(PipedInputStream.java:188)
        at extthread.PipedStreamTest.main(PipedStreamTest.java:27)

    字节流输入(注意由于是字节流,要用到String的getBytes()方法),输入完成关闭管道

    private void writeShortMessage() {
            String strInfo = "this is a short message" ;
            try {
                out.write(strInfo.getBytes());
                out.close();   
            } catch (IOException e) {   
                e.printStackTrace();   
            }   
        }

    字节流输出

    public void readMessageOnce(){
            // 虽然buf的大小是2048个字节,但最多只会从“管道输入流”中读取1024个字节。
            // 因为,“管道输入流”的缓冲区大小默认只有1024个字节。
            byte[] buf = new byte[2048];
            try {
                int len = in.read(buf);
                System.out.println(new String(buf,0,len));
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            //代码来自他人博客
        }

    字符流和字节流用法一致,区别在于byte数组和char数组

     

    管道适合用于线程一对一通信的常景,如果想要一对多,那么就考虑使用共享内存等方法

     

  • 相关阅读:
    elementUI布局,响应式布局实现一行5列或7列布局
    WPF中Popup控件的使用
    ItemControl条目类控件使用Index
    WPF PasswordBox控件使用
    C#调用外部程序
    WPF系统级Converter
    WPF全局异常和自定义异常
    Grid设置共享尺寸组进行联动
    软件测试技术复习提纲
    Mysql环境变量的配置(详细图解)
  • 原文地址:https://www.cnblogs.com/shineyoung/p/10464880.html
Copyright © 2020-2023  润新知