본문 바로가기
Java

java.io.Reader & Writer

by Mecodata 2023. 12. 20.

java.io.Reader

- Java에서 텍스트 기반의 입력 스트림을 다루는 데 사용되는 클래스 텍스트 데이터를 문자 단위로 처리 

- 인코딩 필요 시 InputStreamReader를 사용하여 바이트 스트림을 문자 스트림으로 변환

※ 비슷한 기능을 하는 InputStream은 모든 데이터(이미지, 동영상 포함)를 바이트 단위로 처리

※ 텍스트 데이터 = Reader, 모든 종류의 데이터 = InputStream

주요 메소드

- read() = 데이터(텍스트) 읽기

- skip(Long n) = 입력 스트림의 현재 위치에서  n개 건너 뛰고 읽기

- close() = 입력 스트림 닫기

- mark() = 입력 스트림에서의 현재 위치 마킹

- markSupported() = 입력 스트림에서 마킹한 부분이 있는지 여부

- reset() = 마지막으로 mark()를 호출한 부분으로 이동

 

하위 클래스 종류

File file = new File("C:\\example.txt");
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader reader = new BufferedReader(isr);

- FileReader = 파일로부터 문자 데이터를 읽어오는데 사용

(문자 인코딩이 고정되어 있어 FileInputStream으로 데이터를 읽어온 후 InputStreamReader를 통해 Reader로 변환하면서 인코딩 설정 필요 한글 인코딩 때문에 실질적으로 사용할 일이 거의 X)

※ FileInputStream에 경로를 직접 입력하거나 File 객체를 입력하는 두 가지 방식이 존재하는데 File 객체를 이용하는 것이 가독성 및 유지보수적인 측면에서 더 효율적

InputStreamReader = InputStream → Reader 변환에 사용 

- BufferedReader = 버퍼를 사용하여 문자 데이터를 효율적으로 읽어오는데 사용

 

StringReader stringReader = new StringReader(text);
int charCode;
while ((charCode = stringReader.read()) != -1) {
    char character = (char) charCode;
    System.out.print(character);
}

CharArrayReader charArrayReader = new CharArrayReader(charArray);
int charCode;
while ((charCode = charArrayReader.read()) != -1) {
    char character = (char) charCode;
    System.out.print(character);
}

- StringReader = 문자열에서 문자를 읽어오는데 사용

- CharArrayReader = 문자 배열에서 문자를 읽어오는데 사용

※ StringReader와 CharArrayReader는 char가 아닌 char에 대한 유니코드 값(int)을 반환함 → char로 변환 필요

- PipedReader = Pipe 스트림에 연결된 문자 입력 스트림 생성에 사용 

 

java.io.Writer

- Java에서 텍스트 기반의 출력 스트림을 다루는 데 사용되는 클래스

주요 메소드

- write() = 출력 스트림에 데이터 작성(담기) - 파라미터의 데이터 타입 = char[], int, String

- flush() = 버퍼 비우기 (버퍼에 남아있는 데이터를 출력 대상에 강제로 전송)

- close() = 출력 스트림 닫기 

※ close()는 내부적으로 flush()를 호출하지만 스트림에 에러가 발생하여 종료되더라도 버퍼에 데이터가 남을 수 있기 때문에 close() 이전에 flush()를 선행하는 것이 바람직함

 

하위 클래스 종류

File file = new File("C:\\example.txt");
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw = new BufferedWriter(osw);

- FileWriter = 파일에 문자 데이터를 작성할 때 사용

(문자 인코딩이 고정되어 있어 FileOutputStream과 OutputStreamReader를 통해 인코딩 설정 필요  한글 인코딩 때문에 실질적으로 사용할 일이 거의 X)

- BufferedWriter = 버퍼를 사용하여 문자 데이터를 효율적으로 작성하는데 사용

- OutputStreamWriter = OutputStream → Writer 변환에 사용 

 

StringWriter sw = new StringWriter();

// StringWriter를 사용하여 문자열에 쓰기
sw.write("Hello, StringWriter!");
sw.write(System.lineSeparator()); // 새로운 라인 추가
sw.write("This is a new line.");

// StringWriter에서 문자열 가져오기
String result = stringWriter.toString();
System.out.println(result);

CharArrayWriter caw = new CharArrayWriter();

// CharArrayWriter를 사용하여 문자 배열에 쓰기
caw.write("Hello, CharArrayWriter!");
caw.write(System.lineSeparator()); // 새로운 라인 추가
caw.write("This is a new line.");

// CharArrayWriter에서 문자 배열 가져오기
char[] result = charArrayWriter.toCharArray();
System.out.println(result);

- StringWriter = 문자열에 문자를 작성할 때 사용

- CharArrayWriter = 문자 배열에 문자를 작성할 때 사용

- PipedWriter = Pipe 스트림에 연결된 문자 출력 스트림을 생성에 사용

'Java' 카테고리의 다른 글

java.io.File  (0) 2023.12.20
java.io.InputStream & OutputStream  (0) 2023.12.20
java.util.Properties  (0) 2023.12.19
BufferedReader/BufferedWriter  (0) 2023.12.19
java.net.HttpURLConnection  (0) 2023.12.19

댓글