lec01-Java I/O #2 Reader 과 Writer

2015. 1. 14. 15:26 - 에릭투스

두번째 강의입니다  지난 시간엔 InputStream / OutputStream에 대해서 공부했는데요~

이번엔 Reader / Writer 입니다. 이번에도 입력과 출력을 하는 클래스인데요

뭐가 다르냐!!!!!


처리하는 데이터 타입이 다릅니다!!

InputStream / OutputStream은 byte 타입 ==> 1바이트
Reader / Writer 는 char 타입 ==> 2바이트 단위로 처리 됩니다.


보통 멀티바이트 언어(2byte이상)에서는 Reader/Writer를 통해 데이터를 읽고 씁니다.

왜냐하면, 1바이트 단위인 InputStream/OutputStream을 통해 멀티바이트 언어를 처리할 경우.

문자열이 깨지는 경우가 발생하기 때문이죠....


감이 잘 안오신다구요? 실습을 진행해 봅시다!!.


아래는 Reader예제입니다. InputStream과 사용하는 방식은 거의 동일합니다.

다만 버퍼용으로 사용할 데이터 타입이 char[] 로 바뀐 것을 보실 수 있습니다..


마찬가지로 read 함수를 통해 읽은 char 배열 수를 받아서, String객체 생성을 통해 화면에 출력합니다.

여기서 한가지 주의깊게 보실 부분은 InputStreamReader입니다. System.in이 InputStream이었던건 기억하시나요?

 
InputStreamReader는 InputStream형태의 1바이트 처리 스트림을 2바이트 처리 스트림을 할수 있도록 연결해주는 클래스입니다.
쉽게 말해 스트림과 리더의 중간 사이인 거죠 ㅎㅎ



public static void readerExample(){
		InputStreamReader reader = new InputStreamReader(System.in);
		int read = 0;
		char[] cbuf = new char[512];
		System.out.println("메시지를 입력해주세요. *종료시 exit 입력");
		String line = System.lineSeparator();	//\r\n
		try {
			while((read = reader.read(cbuf)) != -1){
				String text = new String(cbuf, 0, read-line.length());
				System.out.println("입력한 Data : "+text+"("+text.length()+")");
				
				if("exit".equals(text)){
					break;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} 
}


출력하는 예제입니다~ 심플하게 문자열을 char배열로 변환하여 OutputWriter를 통해 write 처리합니다

간단하지용~?

public static void writerExample(){
		String text = "Hello!! Alzio Network Lecture!!";
		char[] textByte = text.toCharArray();
		try {
			OutputStreamWriter writer = new OutputStreamWriter(System.out);
			writer.write(textByte, 0, textByte.length);
			writer.flush();
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
}


다른 카테고리의 글 목록

자바 기본 공부/네트워크 개발 카테고리의 포스트를 톺아봅니다