자바 5.0 프로그래밍
chapter 12 : 자바 I/O
학습목표 스트림 ( Stream ) byte스트림 char스트림 node 와 filter 스트림 File 클래스 객체 직렬화 transient
정의 source destination 입출력 장치 종류 스트림 ( Stream ) 자바 애플리케이션 입장에서 데이터를 소스로부터 입력받거나 또는 목적지로 출력할 수 있도록 해주는 것. 자바의 입출력을 도와주는 매개체. source destination 입력 스트림 출력 스트림 자바 애플리케이션 입출력 장치 종류 파일 키보드 , 모니터 메모리 네트워크 연결 이러한 장치에 데이터를 입력,출력해주기 위한 다양한 스트림이 제공된다.
특징 데이터 종류에 따른 분류 스트림 ( Stream ) 단방향이다. ( Input 스트림 , output 스트림으로 구별 ) FIFO 구조이다. 스트림끼리의 연결이 가능하다. ( Filter Chain) 데이터 종류에 따른 분류 바이트(byte : 8bit ) 동영상, 이미지, 사운드등과 같은 형태의 데이터 처리 문자( char : 16bit ) 일반적인 문자 데이터 처리
데이터 처리방식에 따른 분류 스트림 ( Stream ) Node 스트림 계열 단순한 입출력만을 담당한다. 직접적인 장치에 연결된다. 예> InputStream , OutputStream, FileReader , FileWriter FileInputStream , FileOutputStream 등 Filter 스트림 계열 입력된 데이터를 조작하거나 , 조작된 데이터를 출력하는 추가 작업을 담당한다. 효율적인 입출력이 가능하다. 예> InputStreamReader , OutputStreamWriter, DataInputStream DataOutputStream , BufferedReader , BufferedWriter, ObjectInputStream , ObjectOutputStream 등
ByteArrayInputStream LineNumberInputStream 입력 스트림 계층구조 InputStream FilterInputStream FileInputStream ByteArrayInputStream ObjectInputStream LineNumberInputStream DataInputStream BufferInputStream PushbackInputStream Reader FilterReader CharArrayReader InputStreamReader StringReader PushbackReader FileReader BufferedReader
ByteArrayOutputStream 출력 스트림 계층구조 OutputStream FilterOutputStream FileOutputStream ByteArrayOutputStream ObjectOutputStream DataOutputStream BufferOutputStream PrintStream Writer FilterWriter CharArrayWriter OutputStreamWriter PrintWriter FileWriter BufferedWriter
스트림 ( Stream ) 표준 입출력 표준 입력 : 키보드 System.in 표준 출력 : 모니터 System.out
java.io.InputStream 스트림 ( Stream ) 특징 byte 입력을 하는데 필요한 메소드를 정의한 추상 클래스이다.
java.io.InputStream 스트림 ( Stream ) java.io.FileInputStream 시스템에 있는 파일을 읽을 수 있는 기능을 제공한다. byte 단위로 읽는다. 파일이 존재하지 않으면 FileNotFoundException이 발생된다. java.io.BufferedInputStream 버퍼링은 입출력 작업을 향상시키기 위해서 사용되는 기술이다. java.io.DataInputStream 기본형 데이터를 읽기 위한 메소드를 정의한다.
java.io.OutputStream 스트림 ( Stream ) 특징 byte 출력을 하는데 필요한 메소드를 정의한 추상 클래스이다.
java.io.OutputStream 스트림 ( Stream ) java.io.FileOutputStream 시스템에 있는 파일에 쓸수 있는 기능을 제공한다. byte 단위로 쓴다. java.io.BufferedOutputStream 버퍼가 채워질 때마다 대량으로 쓰기 작업이 된다. flush 기능은 버퍼에 채워지지 않더라고 쓰기 작업이 가능 java.io.DataOutputStream 기본형 데이터를 쓰기 위한 메소드를 정의한다. java.io.PrintStream 모든 데이터 형을 화면에 출력해주는 print() , println() 메소드가 정의됨.
java.io.Reader 스트림 ( Stream ) 특징 char 입력을 하는데 필요한 메소드를 정의한 추상 클래스이다. InputStream 과의 차이점은 2byte 로 읽을 수 있는 메소드가 제공된다.
java.io.Reader 스트림 ( Stream ) java.io.FileReader 시스템에 있는 파일에 읽을수 있는 기능을 제공한다. char 단위로 읽는다. 파일이 존재하지 않으면 FileNotFoundException이 발생된다. 읽은 데이터를 출력해도 글자 깨짐현상이 없다. java.io.BufferedReader 버퍼링으로 처리되면 한 라인을 읽을 수 있는 readLine() 메소드가 제공된다. 한 라인의 끝은 ‘\r’, ‘\n’ 중 하나가 올 경우 또는 ‘\r\n’ 이 오는 경우에 인식한다.
java.io.Writer 스트림 ( Stream ) 특징 char 출력을 하는데 필요한 메소드를 정의한 추상 클래스이다. OutputStream 과의 차이점은 2byte 로 쓸 수 있는 메소드가 제공된다.
java.io.Writer 스트림 ( Stream ) java.io.FileWriter 시스템에 있는 파일에 쓸수 있는 기능을 제공한다. char 단위로 쓴다. 파일이 존재하지 않으면 자동생성된다. 생성자의 boolean 값에 따라서 덮어쓰기 또는 내용추가 인지 구별할 수 있다.
java.io.Writer 스트림 ( Stream ) java.io.BufferedWriter 버퍼링을 통한 char 단위 쓰기 스트림이다. 한 줄 내려쓰기를 할 수 있는 newLine() 메소드가 제공된다. java.io.PrintWriter 바이트 출력 및 문자 출력 모두 가능한 스트림이다. 자동 flush 기능을 포함한다.
InputStreamReader 와 OutputStreamWriter 바이트입력스트림을 문자입력스트림으로 변경시 사용한다. 예 > 키보드로 입력받은 바이트를 문자로 변경시. new InputStreamReader( System.in ); OutputStreamWriter 바이트출력스트림을 문자출력스트림으로 변경시 사용한다.
표준 입출력 예제 스트림 ( Stream ) System.out BufferedReader ( readLine() ) InputStreamReader System.out System.in
표준 입출력 스트림 결합 ( Filter Chain ) 스트림 ( Stream ) 표준 입출력 스트림 결합 ( Filter Chain ) System.in InputStreamReader BufferedReader ( readLine() ) System.out System.in node filter Node 계열에는 한 라인씩 읽을 수 있는 메소드가 없다. 효율적인 I/O 작업을 위해서 filter 계열을 사용한다.
정의 용도 생성 File 클래스 OS 마다 다른 파일시스템을 일관된 방법으로 접근 가능하도록 만든 자바 클래스. 파일에 대한 정보 및 처리를 담당한다. 내용접근 및 파일 생성은 불가능하다. 생성 File file = new File( 파일명); File file = new File( File 객체 , 파일명 ); File file = new File( 디렉토리명 , 파일명 );
File 클래스 예제
File 클래스 파일 쓰기 예제
File 클래스 파일 읽기 예제
파일 읽기/쓰기 예제 * 파일 읽기 * 파일 쓰기 File 클래스 write.txt FileReader BufferedReader ( readLine() ) write.txt FileWriter PrintWriter ( println() )
정의 등장배경 특징 동작방식 객체 직렬화 실행시 동적으로 할당되는 인스턴스 상태를 저장하거나 네트워크로 전송하는 기술. 파일이나 데이터베이스에 저장하지 않는한 동적으로 할당된 객체의 상태값은 보존이 안된다. 특징 객체의 상태를 지속시키는 방법론을 제공한다. 스트림을 통한 확장성을 제공한다. ( 파일, 네트워크 ) 분산환경에서 매우 중요한 개념이다. 동작방식 객체 상태가 byteStream으로 처리된다.
작성방법 객체 직렬화 java.io.Serializable 인터페이스를 구현한다. ( marker ) 인터페이스를 구현한 클래스의 모든 멤버변수가 직렬화 대상이 된다. 직렬화 작업에서 제외시킬 경우에는 transient 키워드 이용한다. 스트림을 이용하여 직렬화 또는 역직렬화 작업을 한다. ObjectOutputStream의 writeObject() 메소드 이용. ObjectinputStream의 readObject() 메소드 이용.
객체 직렬화 예제
객체 직렬화 예제
객체 직렬화 transient 예제
요약 정리 입출력 스트림 node 와 filter 스트림 File 클래스 객체직렬화