티스토리 뷰

Java, JavaScript

[Java] 문자 스트림

체봄 2019. 7. 26. 17:20

[문자 스트림]

: 유니코드 문자를 입출력하는 스트림

  -> 이미지, 동영상과 같은 바이너리 데이터는 입출력 불가능

 

Reader / Writer

: 문자 스트림을 다루는 모든 클래스의 부모 클래스

  추상 클래스

 

InputStreamReader / OutputStreamWriter

: 문자 스트림과 바이트 스트림을 연결시켜주는 역할을 함

  InputStreamReader : 바이트를 읽어 문자로 인코딩하여 입력

  OutputStreamWriter : 문자를 바이트로 디코딩하여 출력

 

 

 

텍스트 파일의 인코딩 형식이 ANSI이면 한글을 잘 읽어오지만,

인코딩 형식이 UTF-8/유니코드 이면 글자가 깨져서 출력된다.  -> 문자 스트림을 이용해 해결!

 

ex)  UTF-8 형식의 텍스트 파일 내용 출력하기

(test.txt)

package StreamEx;

import java.io.*;

public class FileReaderEx {

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

		FileInputStream fi = new FileInputStream("test.txt");
		InputStreamReader in = new InputStreamReader(fi, "UTF-8");
			
		int ch;
		while((ch=in.read()) != -1) {
			System.out.print((char)ch);
		}
			
		fi.close();
	}
}

실행 결과>>

?한글로 된
텍스트

 

test.txt는 한글 데이터를 가지면서 UTF-8 형식으로 저장되었기 때문에 FileInputStream만 사용하여 데이터를 출력하면 글씨가 깨져서 출력된다. 이런 경우에 필요한 것이 문자 스트림이다. 

InputStreamReader의 생성자의 두번째 인자에는 인코딩 형식을 써준다. 

그리고 InputStreamReader 객체의 데이터를 read() 메소드를 이용해 읽어오면 한글 데이터가 잘 출력된다.

(맨앞의 '?'는 왜 출력되는지 모르겠다.) 

 

반응형

'Java, JavaScript' 카테고리의 다른 글

[Java] 직렬화(Serialization)  (0) 2019.08.13
[Java] 병합 정렬(Merge Sort)  (0) 2019.07.31
[Java] File 클래스  (0) 2019.07.24
[Java] BufferedIOStream, DataIOStream  (0) 2019.07.01
[Java] ByteArrayStream, PipedStream  (0) 2019.06.28

댓글