인생을 코딩하다.

문자 단위 입출력 스트림 본문

Java

문자 단위 입출력 스트림

Hyung1 2020. 11. 24. 19:44
728x90
반응형

문자 단위 스트림

 

Reader : 문자 단위로 읽는 최상위 스트림

Writer : 문자 단위로 쓰는 최상위 스트림

 

추상 메서드를 포함한 추상 클래스로 하위 클래스가 상속받아 구현

하위클래스

스트림 클래스 설명
FileReader 파일에사 문자 단위로 읽는 스트림 클래스
InputStreamReader 바이트 단위로 읽은 자료를 문자로 변환해 주는 보조 스트림 클래스
BufferedReader 문자로 읽을 때 배열을 제공하여 한꺼번에 읽을 수 있는 기능을 제공해 주는 보조 스트림

 

스트림 클래스 설명
FileWriter 파일에 문자 단위로 출력하는 스트림 클래스
OutputStreamWriter 파일에 바이트 단위로 출력한 자료를 변환해 주는 보조 스트림
BufferedWriter 문자로 쓸 때 배열을 제공하여 한꺼번에 쓸 수 있는 기능을 제공해 주는 보조 스트림

 

FileReader와 FileWriter

- 파일에 문자를 읽고 쓸 때 가장 많이 사용하는 클래스

- 문자의 인코딩방식을 지정할 수 있음

 

예제

안녕하세요 반갑습니다 abc
// reader.txt
package java8.stream.reader;

import java.io.FileInputStream;
import java.io.IOException;


public class FileReaderTest {
    public static void main(String[] args) throws IOException {

        // FileInputStream fis = new FileInputStream("reader.txt");
        FileReader fis = new FileReader("reader.txt");
        int i;
        while((i = fis.read()) != -1) {
            System.out.print((char)i);
        }
        fis.close();

    }
}
// 안녕하세요 반갑습니다 abc 바이트 단위로 읽기 때문에 한글이 다 깨진다 ->  FileInputStream fis = new FileInputStream("reader.txt");로 실행했을때
// 출력결과
안녕하세요 반갑습니다 abc

문자를 읽을 땐 FileReader

 

만약 바이트 단위로 읽을 때 한글이 깨지는 것을 해결하고 싶다면 InputStreamReader을 쓰는 방법도 있다.

public class FileReaderTest {
    public static void main(String[] args) throws IOException {

        FileInputStream fis = new FileInputStream("reader.txt"); // 문자를 읽을땐 FileReader
        InputStreamReader isr = new InputStreamReader(fis);
        int i;
        while((i = isr.read()) != -1) {
            System.out.print((char)i);
        }
        fis.close();

    }
}

 

출력결과는 위와 같다. 이런 것이 보조스트림이고 데코레이터 패턴(데코레이터 패턴 글 참고)에 쓰인다.

 

예제 2

 

문자 단위의 최상위 클래스는 reader과 wirter이다. 그 하위에 FileReader, FileWirter이 있다.

 

 

File 클래스

- 파일개념을 추상화한 클래스

- 입출력 기능은 없고 파일의 속성, 경로, 이름 등을 알 수 있음

RandomAcessFile 클래스

- 입출력 클래스 중 유일하게 파일 입출력을 동시에 할 수 있는 클래스

- 파일 포인터가 있어서 읽고 쓰는 위치의 이동이 가능함

- 다양한 자료형에 대한 메서드가 제공됨

 

입출력 스트림

 

입출력 스트림

입출력 스트림이란? 네트워크에서 자료의 흐름이 물과 같다는 의미에서 유래 다양한 입출력 장치에 독립적으로 일관성 있는 입출력 방식제공 입출력이 구현되는 곳에서는 모두 I/O 스트림을 사

junghyungil.tistory.com

바이트 단위 입출력 스트림

 

바이트 단위 입출력 스트림

바이트 단위 스트림 InputStream : 바이트 단위 입력 스트림 최상위 클래스 OutPutStream : 바이트 단위 출력 스트림 최상위 클래스 추상 메서드를 포함한 추상 클래스로 하위 클래스가 구현하여 사용

junghyungil.tistory.com

문자 단위 입출력 스트림

 

문자 단위 입출력 스트림

문자 단위 스트림 Reader : 문자 단위로 읽는 최상위 스트림 Writer : 문자 단위로 쓰는 최상위 스트림 추상 메서드를 포함한 추상 클래스로 하위 클래스가 상속받아 구현 하위클래스 스트림 클래스

junghyungil.tistory.com

보조스트림

 

보조 스트림

보조스트림 - 실제 읽고 쓰는 스트림이 아닌 보조적인 기능을 추가하는 스트림 - FilterInputStream과 FilterOutputStream이 보조스트림의 상위 클래스 생성자의 매개 변수로 또 다른 스트림을 가짐 생성자

junghyungil.tistory.com

 

728x90
반응형

'Java' 카테고리의 다른 글

[Java] Serializable과 NIO  (0) 2020.11.25
[Java] 보조 스트림  (0) 2020.11.24
[Java] 바이트 단위 입출력 스트림  (0) 2020.11.23
[Java] 입출력 스트림  (0) 2020.11.19
[Java] Generic  (0) 2020.11.19
Comments