testpipedinputstream.java

来自「一个很好的Java函数实例」· Java 代码 · 共 73 行

JAVA
73
字号
package apibook.c3.s8;

import java.io.*;

//测试PipedOutputStream和PipedInputStream类
public class TestPipedInputStream {
  public TestPipedInputStream() {
  }

  public static void main(String[] args) {
    try {
        PipedOutputStream producer = new PipedOutputStream();
        PipedInputStream consumer = new PipedInputStream(producer);

        StringConsumer strconsumer = new StringConsumer(consumer);
        StringProducer strproducer = new StringProducer(producer);

        strconsumer.start();
        strproducer.start();
    } catch (IOException e) {
        e.printStackTrace();
    }
  }
}
//辅助类:字符串输出器
class StringConsumer extends Thread {
    private DataInputStream in;

    public StringConsumer(InputStream i) {
        in = new DataInputStream(i);
    }
    public void run() {
        while (true) {
          try {
            int num = in.available();
            byte[] content = new byte[num];
            in.read(content, 0, num);//从管道读取字符串
            System.out.println("read from pipe: " + new String(content));
            sleep(500);//sleep500毫秒
          }
          catch (IOException e) {
            e.printStackTrace();
          }
          catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
    }
}

//辅助类:字符串产生器
class StringProducer extends Thread {
    private DataOutputStream out;

    public StringProducer(OutputStream o) {
        out = new DataOutputStream(o);
    }
    public void run() {
        while (true) {
            try {
                String content = "string from stringproducer";
                out.writeBytes(content);//向管道写入字符串
                out.flush();
                sleep(800);  // sleep800毫秒
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?