Java에서 문자 배열을 입력 스트림처럼 다루고 싶다면 CharArrayReader 클래스를 사용하면 됩니다. CharArrayReader는 Reader 클래스의 하위 클래스로, 문자 배열을 문자 입력 스트림(character input stream)처럼 활용할 수 있게 해주는 어댑터 역할을 합니다.
이 클래스는 문자 배열의 내용을 처음부터 끝까지 전체로 읽거나, 특정 오프셋(offset)부터 일부만 읽는 것도 가능합니다. 따라서 메모리에 있는 문자 데이터를 파일이나 네트워크 스트림과 동일한 방식으로 처리해야 할 때 매우 유용합니다.
CharArrayReader의 주요 메서드
- read() – 스트림에서 문자를 하나씩 또는 배열 단위로 읽어옵니다.
- close() – 스트림을 닫고 관련 시스템 자원을 해제합니다.
- mark(int readAheadLimit) – 현재 위치를 표시(mark)하여 나중에 되돌아올 수 있게 합니다.
- reset() – 마지막으로 mark()가 호출된 지점으로 스트림 위치를 되돌립니다.
- skip(long n) – 지정한 개수만큼 문자를 건너뜁니다.
문법
public class CharArrayReader extends Reader
생성자는 두 가지 형태를 제공합니다. CharArrayReader(char[] buf)는 배열 전체를 대상으로 하며, CharArrayReader(char[] buf, int offset, int length)는 지정한 오프셋부터 길이만큼만 읽도록 설정합니다.
예제 코드
아래 예제에서는 문자 배열을 CharArrayReader로 감싸고, 이를 다시 BufferedReader로 감싸 한 줄씩 편리하게 읽어오는 방법을 보여줍니다.
import java.io.*;
public class CharArrayReaderTest {
public static void main(String args[]) throws Exception {
char array[] = {'T', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's', ' ', 'P', 'o', 'i', 'n', 't', '!'};
// 문자 배열을 Reader로 변환
CharArrayReader car = new CharArrayReader(array);
// BufferedReader로 감싸면 readLine() 사용 가능
BufferedReader br = new BufferedReader(car);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}
}실행 결과
Tutorials Point!
정리
CharArrayReader를 사용하면 별도의 임시 파일을 만들지 않고도 메모리상의 문자 배열을 스트림 기반 API에 그대로 전달할 수 있습니다. BufferedReader와 같은 고수준 스트림과 조합하면 readLine() 같은 편리한 메서드도 활용할 수 있어, 테스트 코드나 문자열 데이터 파싱 작업에서 특히 유용합니다.