자바 파이프 흐름 구현 스 레 드 간 통신 프로 세 스 분석

관도 류
자바 언어 에서 다양한 입력/출력 흐름 Stream 을 제공 하여 우 리 는 데 이 터 를 편리 하 게 조작 할 수 있 습 니 다.그 중에서 파이프 흐름 은 특수 한 흐름 으로 서로 다른 스 레 드 에서 데 이 터 를 직접 전송 하 는 데 사 용 됩 니 다.하나의 스 레 드 는 출력 파이프 흐름 으로 데 이 터 를 보 내 고 다른 스 레 드 는 입력 파이프 흐름 에서 데 이 터 를 읽 습 니 다.
파 이 프 를 사용 하여 서로 다른 스 레 드 간 의 통신 을 실현 하고 임시 파일 과 같은 것 을 빌 릴 필요 가 없다.
바이트 흐름
Piped InputStream 과 Piped OutputStream
문자 흐름
Piped Reader 와 Piped Writer.
예시

public class PipeStreamTest {
  public static void main(String[] args) throws IOException, InterruptedException {
    WriteData writeData = new WriteData();
    ReadData readData = new ReadData();

    PipedReader reader = new PipedReader();
    PipedWriter writer = new PipedWriter();

    writer.connect(reader);

    new Thread(() -> {
      writeData.writeMethod(writer);
    }).start();

    Thread.sleep(2000);

    new Thread(() -> {
      readData.readMethod(reader);
    }).start();
  }

  static class WriteData {
    public void writeMethod(PipedWriter writer) {
      try {
        System.out.println("write :");
        for (int i = 0; i < 300; i++) {
          String outData = "" + (i + 1);
          writer.write(outData);
          System.out.print(outData);
        }
        System.out.println();
        writer.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

  static class ReadData {
    public void readMethod(PipedReader reader) {
      try {
        System.out.println("read :");
        char[] byteArray = new char[20];
        int readLength = reader.read(byteArray);
        while (readLength != -1) {
          String newData = new String(byteArray, 0, readLength);
          System.out.print(newData);
          readLength = reader.read(byteArray);
        }
        System.out.println();
        reader.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}
실행 결 과 는 다음 과 같 습 니 다.

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기