BufferedReader/BufferedWriter는 버퍼를 이용해서 입출력의 효율을 높일 수 있도록 해주는 역할을 한다. 버퍼를 이용하면 입출력의 효율이 비교할 수 없을 정도로 좋아지기 때문에 사용하는 것이 좋다.

BufferedReader의 readLine()을 사용하면 데이터를 라인단위로 읽을 수 있고 BufferedWriter는 newLine()이라는 줄바꿈 해주는 메서드를 가지고 있다.

public class BufferedReaderEx1 {
	public static void main(String[] args) {
		try {
			FileReader fr = new FileReader("src/a210727/BufferedReaderEx1.java");
			BufferedReader br = new BufferedReader(fr);
			
			String line = "";
			for(int i=1;(line = br.readLine())!=null;i++) {
				if(line.indexOf(";")!=-1)
					System.out.println(i+":"+line);
			}
			br.close();
		} catch(Exception e) {}
	}

}
1:package a210727;
3:import java.io.BufferedReader;
4:import java.io.FileReader;
9:			FileReader fr = new FileReader("src/a210727/BufferedReaderEx1.java");
10:			BufferedReader br = new BufferedReader(fr);
12:			String line = "";
13:			for(int i=1;(line = br.readLine())!=null;i++) {
14:				if(line.indexOf(";")!=-1)
15:					System.out.println(i+":"+line);
17:			br.close();

BufferedReader의 readLine()을 이용해서 파일의 라인단위로 읽은 다음 indexOf()를 이ㅛㅇㅇ해서 ':'를 포함하고 있는지 확인하여 출력하는 예제이다. 파일에서 특정 문자 또는 문자열을 포함한 라인을 쉽게 찾아낼 수 있음을 보여 준다.

 

 

 

InputStreamReader와 OutputStreamWriter

InputStreamReader/OutputStreamWriter는 이름에서 알 수 있는 것과 같이 바이트기반 스트림을 문자기반 스트림으로 연결시켜주는 역할을 한다. 그리고 바이트기반 스트림의 데이터를 지정된 인코딩의 문자데이터로 변환하는 작업을 수행한다.

InputStreamReader/OutputStreamWriter는 Reader/Writer의 자손이다.

 

생성자/메서드 설명
InputStreamReader(InputStream in) QS에서 사용하는 기본 인코딩의 문자로 변환하는 InputStreamReader를 생성한다
InputStreamReader(InputSteram in, String encoding) 지정된 인코딩을 사용하는 InputStreamReader를 생성한다.
String getEncoding() InputStreamReader의 인코딩을 알려 준다.

 

생성자/메서드 설명
OutputStream(OutputStream out) OS에서 사용하는 기본 인코딩의 문자로 변환하는 OutputStreamWriter를 생성한다.
OutputStreamWriter(OutputStream out, String encoding) 지정된 인코딩을 사용하는 OutputStreamWriter를 생성한다.
String getEncoding() OutputStreamWriter의 인코딩을 알려 준다.

한글윈도우에서 중국어로 작성된 파일을 읽을 때 InputStreamReader(InputStream in, String encoding)를 이용해서 인코딩이 중국어로 되어 있다는 것을 지정해주어야 파일의 내용이 깨지지 않고 올바르게 보일 것이다. 인코딩을 지정해 주지 않는다면 OS에서 사용하는 인코딩을 사용해서 파일을 해석해서 보여 주기 때문에 원래 작성된 대로 볼 수 없을것이다.

이와 마찬가지로 OutputStreamWriter를 이용해서 파일에 텍스트데이터를 저장할 때 생성자 OutputStreamWriter(OutputStream out, String encoding)를 이용해서 인코딩을 지정하지 않으면 OS에서 사용하는 인코딩으로 데이터를 저장할 것이다.

시스템 속성에서 sun.jnu.encoding의 값을 보면 OS에서 사용하는 인코딩의 종류를 알 수 있다.

+ Recent posts