본문 바로가기

Java Programming

Stream - Line-Oriented I/O, BufferedStream ①

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Character Stream 챕터에 나오는 Line-Oriented I/O는 같은 글에서 다루지 않았다. 왜냐하면 Character Stream 챕터의 마지막 부분에 Line-Oriented I/O Stream에 대한 설명이 나오면서 동시에 Buffered Stream에 대한 소개가 나오기 때문에 약간은 틀린 개념이기 때문에 따로 나누어서 공부를 했다.

기존의 Byte Stream과 Character Stream이 바이트 단위로 입출력을 했다면, Line-Oriented I/O는 line-terminater 단위로 입출력을 해준다. line-terminater는 carriage-return/line-feed sequence ("\r\n") 이렇게 두가지 종류가 있다고 한다.

CopyLines 라는 클래스의 소스코드가 튜토리얼에 나와있으면 직접 코딩을 해봤다.

소스를 살펴보면 입력을 위한 BufferedReader 클래스와 출력을 위한 PrintWriter 클래스가 사용된 것을 알 수 있고 종전에 Byte Stream 이나 Character Stream의 read() 메소드가 리턴하는 값을 받던 정수형 변수가 사라지고 대신에 readLine() 이라는 메소드와 String 객체가 생성되어 있는 것을 볼 수 있다.

또한 흥미로운점은 BufferedReader 클래스와 PrintWriter 클래스의 새로운 객체를 생성할때 인자로 CopyCharacters 클래스에서 사용하던 FileReader와 FileWriter를 사용한다는 점이다. 역시나 리소스의 누수를 방지하기 위해서 입출력 객체를 닫아준 것도 확인할 수 있다.

FileReader와 FileWriter 객체를 생성한다는 것은 Line-Oriented I/O에서 사용되는 클래스들이 내부적으로 문자열 단위의 Stream을 사용하고 또 문자열 단위의 Stream은 Byte Stream을 근간으로 하기 때문에 모든 입출력과 관련된 클래스는 Byte Stream을 사용한다는 것을 알 수 있었다.