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 |
댓글