생각을 개발하자, 박진형

[Java] 자바, 데이터 입출력 방식 Stream 본문

Java/java(old post)

[Java] 자바, 데이터 입출력 방식 Stream

imjinbro imjinbro 2017.01.24 02:05

[데이터 입출력 방식 Stream]

자바 프로그램에서 입력되고 출력되는 모든 데이터는 스트림 형태(1byte씩)로 주고받는다.

스트림 형태란 데이터가 한 자씩 일렬로 흘러가는 형태, 키보드로 입력받은 데이터도 스트림으로 받고 모니터로 출력하는 데이터도 스트림으로 받는다.

오늘 포스팅할 것은  큰 단위의 데이터를 스트림하는 형태에 대해 배워볼 것인데, 큰 단위의 데이터스트림은 보통 파일에 기록해두고 파일 내용을 불러온다.

원래는 DB에 저장해두는 것이 맞지만 구조화된 데이터 파일(엑셀)을 쓰면 비슷한 효과라고 할까나....? 

아무튼 자바에서는 스트림을 표준클래스(java.io)로 지원을 하는데, 파일의 흐름 상태에 따라 구분하고, 데이터의 형태에 따라 클래스를 최종 구분한다.

파일의 흐름 : 입/출력, 출력할 때에는 OutputStream 입력할 때에는 InputStream을 이용한다.

데이터 종류 : 문자 스트림, 바이트 스트림(사람은 알아보기 힘들지만 프로그램에서 사용할 수 있는 데이터로 구성) 등


파일의 흐름만 구분한 클래스가 있고 이중적으로 데이터 종류로 구분한 클래스가 있다.


다음 포스팅에서는 파일에 대한 입출력을 다뤄볼 것이다.

파일에 대한 입출력 방법에는 바이트, 문자 스트림 둘다 이용해볼 것이다. 엄밀히 말하자면 4가지 클래스이다.

파일에 대한 바이트스트림 입출력 클래스 : FileOutputStream, FileInputStream 

파일에 대한 문자스트림 입출력 클래스 : FileWriter, FileReader 


이 뿐만 아니라 다양한 부가기능을 제공하는 클래스(java.io 패키지 내)들이 있기도하다.

버퍼(데이터 임시저장공간)를 제공하여 입출력 성능을 향상시키는 클래스, 파일의 최종수정 일시를 알아내는 클래스, 파일자체를 다루는 클래스 등

File로 클래스 이름이 시작한다.


파일을 읽고 쓰는 단계에서 자바만 관여하는 것이 아니라 운영체제도 관여한다.

파일에 데이터를 쓰는 단계는 간략하게 보면 3단계이다.

1) 파일을 연다.

2) 데이터를 입력한다.

3) 파일을 저장하고 끈다.


간단하게 보이지만 각 단계마다 숨겨진 과정들이 있다. 

가령 1단계 파일을 여는 과정에서는 운영체제에 실제로 파일이 있는지 체크해야한다. 파일은 혼자만의 존재가아니라 운영체제에 관리되는 대상이기 때문이다.

파일에 대해 작업을 다했으면(데이터 입/출력) 파일을 꺼야하는데 닫는 일도 운영체제를 통해서 해야한다.

파일에 대한 작업을 하기위한 자원을 체크하고 자원을 사용하고 난 후 다시 돌려주는 일까지도 운영체제와 같이 해야하기때문이다. 

그렇기때문에 데이터를 한번 읽고 쓸 때마다 파일을 열고 닫는 것보다 열어두고 데이터 입출력을 필요한만큼 하고 난 후 파일을 닫는 것이 일반적이다.