문자 기반 스트림: (File, Piped) Reader/Write

2022. 4. 26. 18:07·자바/입출력 IO

1. Reader와 Writer

- 바이트 기반 스트림의 조상이 InputStream과 OutputStream인 것과 같이 문자 기반 스트림

에서는 Reader와 Writer가 그와 같은 역할을 한다.

 

- byte 배열 대신 char 배열을 사용한다는 것 외에는 바이트 기반 스트림과는 다르지 않다.

 

- 문자 기반 스트림은 단순히 2 byte로 스트림을 처리하는 것만을 의미하지 않고, 문자 데이터를

다루는데 필요한 또 하나의 정보는 인코딩이 있다.

 

- 그러므로, Reader는 특정 인코딩을 읽어서 유니코드로 변환하고 Writer는 유니코드를 특정 인코딩

으로 변환하여 저장한다.

 

 

 

 

2. FileReader와 FileWriter

- FileInputStream과 FileOutputStream의 방법이랑 다르지 않으므로, 바로 밑 예제를 통해서 이해하자.

 

 

 

 

2-1. FileReader와 FileWriter를 이해하기 위한 예제(1)

: File의 바이트 기반과 문자 기반의 스트림 차이를 알아보는 예제이다.

 

Exercise015

 

 

 

 

2-2. FileReader와 FileWriter를 이해하기 위한 예제(2)

: 공백과 띄어쓰기가 있는 문자 데이터를 받아서 공백을 모두 없앤 후, 다시 출력하는 예제이다.

 

Exercise016
공백이 있는 문자들이 공백 없이 나왔음

 

 

 

 

3. PipedRead와 PipedWriter

- 이 문자 기반 스트림은 쓰레드 간에 데이터를 주고받을 때 사용된다.

 

- 다른 스트림과는 달리 입력과 출력 스트림을 하나의 스트림으로 연결(connect)해서 데이터를

주고받는다는 특징이 있다.

 

- 스트림을 생성한 다음에 어느 한쪽 쓰레드에서 connect()를 호출해서 입력과 출력 스트림을 연결한다.

( tip) 입출력을 마친 후에는 어느 한쪽 스트림만 닫아도 나머지 스트림은 자동으로 닫힌다. )

 

 

 

 

3-1. Piped 읽기/쓰기를 이해하기 위한 예제(1)

: 두 쓰레드가 PipedReader/PipedWriter를 이용해서 서로 메시지를 주고받는 예제이다.

 

Exercise017
InputThread
OutputThread

 

( 쓰레드를 시작하기 전에 PipedReader와 PipedWriter를 연결해야 한다는 것에 유의하자. )

 

( StringWriter는 CharArrayWriter처럼 메모리를 사용하는 스트림인데, 내부적으로 String Buffer를

가지고 있어서 출력하는 내용이 여기에 저장된다. )

( 그러므로, toString()을 사용하면 저장된 값이 나오게 된다. )

 

 

 

 

4. StringReader와 StringWriter

- 위 3-1 예제(1)에서 봤듯이 StringWriter에 출력되는 데이터는 내부의 StringBuffer에 저장된다.

 

- 그러므로, StringWriter의 아래와 같은 메서드를 이용해서 저장된 데이터를 얻을 수 있다.

 

(1) StringBuffer getBuffer()

: StringWriter에 출력한 데이터가 저장된 StringBuffer를 반환한다.

 

(2) String toString()

: StringWriter에 출력된 문자열을 반환한다.

 

 

 

 

4-1 . StringReader와 StringWriter를 이해하기 위한 예제(1)

: StringWriter의 메서드를 이해하기 위한 예제이다.

 

Exercise018

 

'자바 > 입출력 IO' 카테고리의 다른 글

표준 입출력과 File: System(in, out, err)  (0) 2022.04.27
문자 기반의 보조 스트림: (Buffered, InputStream, OutputStream) 읽기와 쓰기  (0) 2022.04.27
FilterOutputStream의 자손: Print 스트림(보조 스트림)  (0) 2022.04.25
InputStream의 자손: Sequence 입력 스트림(보조 스트림)  (0) 2022.04.25
바이트 기반의 보조 스트림의 자손: Data 입출력 스트림  (0) 2022.04.24
'자바/입출력 IO' 카테고리의 다른 글
  • 표준 입출력과 File: System(in, out, err)
  • 문자 기반의 보조 스트림: (Buffered, InputStream, OutputStream) 읽기와 쓰기
  • FilterOutputStream의 자손: Print 스트림(보조 스트림)
  • InputStream의 자손: Sequence 입력 스트림(보조 스트림)
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      자바 개념
      문자 기반 스트림
      스트림
      안드로이드 스튜디오
      역직렬화
      InputStream
      제자리 정렬
      코딩트리조별과제
      Arrays
      유용한 클래스
      소켓 프로그래밍
      Collections Framework
      다형성
      outputstream
      map()
      ServerSocket
      코드트리
      java.time 패키지
      코딩테스트
      java.lang패키지
      snail
      중간연산
      안정 정렬
      serializable
      file
      불안정 정렬
      알고스팟
      TCP 소켓 프로그래밍
      선택 정렬
      람다식
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    문자 기반 스트림: (File, Piped) Reader/Write
    상단으로

    티스토리툴바