Stream - Line-Oriented I/O, BufferedStream ①
2007. 1. 10. 15:48ㆍJava Programming
반응형
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 (
CopyLines 라는 클래스의 소스코드가 튜토리얼에 나와있으면 직접 코딩을 해봤다.
또한 흥미로운점은 BufferedReader 클래스와 PrintWriter 클래스의 새로운 객체를 생성할때 인자로 CopyCharacters 클래스에서 사용하던 FileReader와 FileWriter를 사용한다는 점이다. 역시나 리소스의 누수를 방지하기 위해서 입출력 객체를 닫아준 것도 확인할 수 있다.
FileReader와 FileWriter 객체를 생성한다는 것은 Line-Oriented I/O에서 사용되는 클래스들이 내부적으로 문자열 단위의 Stream을 사용하고 또 문자열 단위의 Stream은 Byte Stream을 근간으로 하기 때문에 모든 입출력과 관련된 클래스는 Byte 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을 사용한다는 것을 알 수 있었다.
반응형