Java의 정석 제 14 장 입출력(I/O) Java 정석 2010. 1. 17 남궁성 강의 castello@naver.com Chapter 14. 입출력(I/O) http://www.javachobo.com Java의 정석 제 14 장 입출력(I/O) 안녕하십니까? 자바의 정석의 저자 남궁성입니다. 지금부터 제14장 입출력에 대한 강의를 시작하겠습니다. 2010. 1. 17 남궁성 강의 castello@naver.com
Java 1. 입출력(I/O) 1.1 입출력(I/O)과 스트림(stream) 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 1. 입출력(I/O) 1.1 입출력(I/O)과 스트림(stream) 1.2 바이트기반 스트림 – InputStream, OutputStream 1.3 보조스트림 1.4 문자기반 스트림 – Reader, Writer 2. 바이트기반 스트림 2.1 InputStream과 OutputStream 2.2 ByteArrayInputStream과 ByteArrayOutputStream 2.3 FileInputStream과 FileOutputStream 3. 바이트기반 보조스트림 세부목차인데요. 이 강의는 이와 같은 순서로 진행될 것입니다. 3.1 FilterInputStream과 FilterOutputStream 3.2 BufferedInputStream과 BufferedOutputStream 3.3 DataInputStream과 DataOutputStream 3.4 SequenceInputStream 3.5 PrintStream
Java 4. 문자기반 스트림 4.1 Reader와 Writer 4.2 FileReader와 FileWriter 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 4. 문자기반 스트림 4.1 Reader와 Writer 4.2 FileReader와 FileWriter 4.3 PipedReader와 PipedWriter 4.4 StringReader와 StringWriter 5. 문자기반 보조스트림 5.1 BufferedReader와 BufferedWriter 5.2 InputStreamReader와 OutputStreamWriter 6. 표준입출력과 File 6.1 표준입출력 6.2 RandomAccessFile 세부목차인데요. 이 강의는 이와 같은 순서로 진행될 것입니다. 6.3 File 7. 직렬화(serialization) 7.1 직렬화(serialization)란? 7.2 ObjectInputStream, ObjectOutputStream 7.3 직렬화 가능한 클래스 만들기 7.4 직렬화 가능한 클래스의 버전관리 3
Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 1. 입출력(I/O)
1.1 입출력(I/O)과 스트림(stream) Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 1.1 입출력(I/O)과 스트림(stream) ▶ 입출력(I/O)이란? - 입력(Input)과 출력(Output)을 줄여 부르는 말 - 두 대상 간의 데이터를 주고 받는 것 ▶ 스트림(stream)이란? - 데이터를 운반(입출력)하는데 사용되는 연결통로 - 연속적인 데이터의 흐름을 물(stream)에 비유해서 붙여진 이름 - 하나의 스트림으로 입출력을 동시에 수행할 수 없다.(단방향 통신) - 입출력을 동시에 수행하려면, 2개의 스트림이 필요하다. int ch = in.read(); out.write("world"); Hello 파일(Test.txt) H e l l o 입력스트림 d l r o w 출력스트림 Java어플리케이션 5 5
1.2 바이트기반 스트림 – InputStream, OutputStream Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 1.2 바이트기반 스트림 – InputStream, OutputStream - 데이터를 바이트(byte)단위로 주고 받는다. 6 6
Java 1.3 보조스트림 정석 - 스트림의 기능을 향상시키거나 새로운 기능을 추가하기 위해 사용 Chapter 14. 입출력(I/O) http://www.javachobo.com 1.3 보조스트림 - 스트림의 기능을 향상시키거나 새로운 기능을 추가하기 위해 사용 - 독립적으로 입출력을 수행할 수 없다. 7 7
1.4 문자기반 스트림 – Reader, Writer Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 1.4 문자기반 스트림 – Reader, Writer - 입출력 단위가 문자(char, 2 byte)인 스트림. 문자기반 스트림의 최고조상 8 8
Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 2. 바이트기반 스트림 9
2.1 InputStream과 OutputStream Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 2.1 InputStream과 OutputStream ▶ InputStream(바이트기반 입력스트림의 최고 조상)의 메서드 ▶ OutputStream(바이트기반 출력스트림의 최고 조상)의 메서드 10 10
2.2 ByteArrayInputStream과 ByteArrayOutputStream Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 2.2 ByteArrayInputStream과 ByteArrayOutputStream - 바이트배열(byte[])에 데이터를 입출력하는 바이트기반 스트림 11 11
2.2 ByteArrayInputStream과 ByteArrayOutputStream Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 2.2 ByteArrayInputStream과 ByteArrayOutputStream 12 12
2.3 FileInputStream과 FileOutputStream Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 2.3 FileInputStream과 FileOutputStream - 파일(file)에 데이터를 입출력하는 바이트기반 스트림 13 13
3. 바이트기반 보조스트림 Java 정석 의 Chapter 14. 입출력(I/O) 14 http://www.javachobo.com 3. 바이트기반 보조스트림 14
3.1 FilterInputStream과 FilterOutputStream Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 3.1 FilterInputStream과 FilterOutputStream - 모든 바이트기반 보조스트림의 최고조상 - 보조스트림은 자체적으로 입출력을 수행할 수 없다. - 상속을 통해 FilterInputStream/FilterOutputStream의 read()와 write()를 원하는 기능대로 오버라이딩해야 한다. 15 15
3.2 BufferedInputStream과 BufferedOutputStream Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 3.2 BufferedInputStream과 BufferedOutputStream - 입출력 효율을 높이기 위해 버퍼(byte[])를 사용하는 보조스트림 - 보조스트림을 닫으면 기반스트림도 닫힌다. 16 16
3.2 BufferedInputStream과 BufferedOutputStream Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 3.2 BufferedInputStream과 BufferedOutputStream 17 17
3.3 DataInputStream과 DataOutputStream Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 3.3 DataInputStream과 DataOutputStream - 기본형 단위로 읽고 쓰는 보조스트림 - 각 자료형의 크기가 다르므로 출력할 때와 입력할 때 순서에 주의 18 18
Java 3.4 SequenceInputStream 정석 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 3.4 SequenceInputStream - 여러 입력스트림을 연결해서 하나의 스트림처럼 다룰 수 있게 해준다. 19 19
Java 3.5 PrintStream (1/2) 정석 - 데이터를 다양한 형식의 문자로 출력하는 기능을 제공하는 보조스트림 Chapter 14. 입출력(I/O) http://www.javachobo.com 3.5 PrintStream (1/2) - 데이터를 다양한 형식의 문자로 출력하는 기능을 제공하는 보조스트림 - System.out과 System.err이 PrintStream이다. - PrintStream보다 PrintWriter를 사용할 것을 권장한다. 20 20
Java 3.5 PrintStream (2/2) 정석 의 Chapter 14. 입출력(I/O) 21 21 http://www.javachobo.com 3.5 PrintStream (2/2) 21 21
Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 4. 문자기반 스트림 22
Java 4.1 Reader와 Writer 정석 ▶ Reader(문자기반 입력스트림의 최고 조상)의 메서드 Chapter 14. 입출력(I/O) http://www.javachobo.com 4.1 Reader와 Writer ▶ Reader(문자기반 입력스트림의 최고 조상)의 메서드 ▶ Writer(문자기반 출력스트림의 최고 조상)의 메서드 23 23
4.2 FileReader와 FileWriter Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 4.2 FileReader와 FileWriter - 문자기반의 파일 입출력. 텍스트 파일의 입출력에 사용한다. 24 24
4.3 PipedReader와 PipedWriter Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 4.3 PipedReader와 PipedWriter - 프로세스(쓰레드)간의 통신(데이터를 주고 받음)에 사용한다. 25 25
4.4 StringReader와 StringWriter Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 4.4 StringReader와 StringWriter - CharArrayReader, CharArrayWriter처럼 메모리의 입출력에 사용한다. - StringWriter에 출력되는 데이터는 내부의 StringBuffer에 저장된다. 26 26
5. 문자기반 보조스트림 Java 정석 의 Chapter 14. 입출력(I/O) 27 http://www.javachobo.com 5. 문자기반 보조스트림 27
5.1 BufferedReader와 BufferedWriter Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 5.1 BufferedReader와 BufferedWriter - 입출력 효율을 높이기 위해 버퍼(char[])를 사용하는 보조스트림 - 라인(line)단위의 입출력이 편리하다. 28 28
5.2 InputStreamReader와 OutputStreamWriter Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 5.2 InputStreamReader와 OutputStreamWriter - 바이트기반스트림을 문자기반스트림처럼 쓸 수 있게 해준다. - 인코딩(encoding)을 변환하여 입출력할 수 있게 해준다. - 콘솔(console, 화면)로부터 라인단위로 입력받기 - 인코딩 변환하기 29 29
6. 표준입출력과 File Java 정석 의 Chapter 14. 입출력(I/O) 30 http://www.javachobo.com 6. 표준입출력과 File 30
6.1 표준입출력 – System.in, System.out, System.err Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 6.1 표준입출력 – System.in, System.out, System.err - 콘솔(console, 화면)을 통한 데이터의 입출력을 ‘표준 입출력’이라 한다. - JVM이 시작되면서 자동적으로 생성되는 스트림이다. 31 31
Java 6.2 RandomAccessFile 정석 - 하나의 스트림으로 파일에 입력과 출력을 모두 수행할 수 있는 스트림 Chapter 14. 입출력(I/O) http://www.javachobo.com 6.2 RandomAccessFile - 하나의 스트림으로 파일에 입력과 출력을 모두 수행할 수 있는 스트림 - 다른 스트림들과 달리 Object의 자손이다. 32 32
Java 6.3 File (1/2) – 생성자와 경로관련 메서드 정석 - 파일과 디렉토리를 다루는데 사용되는 클래스 의 Chapter 14. 입출력(I/O) http://www.javachobo.com 6.3 File (1/2) – 생성자와 경로관련 메서드 - 파일과 디렉토리를 다루는데 사용되는 클래스 33 33
6.3 File (1/2) – 생성자와 경로관련 메서드(예제) Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 6.3 File (1/2) – 생성자와 경로관련 메서드(예제) 34 34
Java 6.3 File (2/2) – 파일의 속성, 생성, 삭제, 목록 정석 의 Chapter 14. 입출력(I/O) 35 http://www.javachobo.com 6.3 File (2/2) – 파일의 속성, 생성, 삭제, 목록 35 35
6.3 File (2/2) – 파일의 속성, 생성, 삭제, 목록(예제1) Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 6.3 File (2/2) – 파일의 속성, 생성, 삭제, 목록(예제1) 36 36
6.3 File (2/2) – 파일의 속성, 생성, 삭제, 목록(예제2) Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 6.3 File (2/2) – 파일의 속성, 생성, 삭제, 목록(예제2) 37 37
6.3 File (2/2) – 파일의 속성, 생성, 삭제, 목록(예제3) Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 6.3 File (2/2) – 파일의 속성, 생성, 삭제, 목록(예제3) 38 38
7. 직렬화(Serialization) Java 정석 의 Chapter 14. 입출력(I/O) 39 http://www.javachobo.com 7. 직렬화(Serialization) 39
Java 7.1 직렬화(serialization)란? 정석 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 7.1 직렬화(serialization)란? - 객체를 ‘연속적인 데이터’로 변환하는 것. 반대과정은 ‘역직렬화’라고 한다. - 객체의 인스턴스변수들의 값을 일렬로 나열하는 것 직렬화 - 객체를 저장하기 위해서는 객체를 직렬화해야 한다. - 객체를 저장한다는 것은 객체의 모든 인스턴스변수의 값을 저장하는 것 40 40
7.2 ObjectInputStream, ObjectOutputStream Java 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 7.2 ObjectInputStream, ObjectOutputStream - 객체를 직렬화하여 입출력할 수 있게 해주는 보조스트림 - 객체를 파일에 저장하는 방법 - 파일에 저장된 객체를 다시 읽어오는 방법 41 41
Java 7.3 직렬화 가능한 클래스 만들기(1/2) 정석 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 7.3 직렬화 가능한 클래스 만들기(1/2) - java.io.Serializable을 구현해야만 직렬화가 가능하다. - 제어자 transient가 붙은 인스턴스변수는 직렬화 대상에서 제외된다. - Serializable을 구현하지 않은 클래스의 인스턴스도 직렬화 대상에서 제외 42 42
Java 7.3 직렬화 가능한 클래스 만들기(2/2) 정석 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 7.3 직렬화 가능한 클래스 만들기(2/2) - Serializable을 구현하지 않은 조상의 멤버들은 직렬화 대상에서 제외된다. - readObject()와 writeObject()를 오버라이딩하면 직렬화를 마음대로… 43 43
Java 7.4 직렬화 가능한 클래스의 버전관리 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 7.4 직렬화 가능한 클래스의 버전관리 - 직렬화했을 때와 역직렬화했을 때의 클래스가 같은지 확인할 필요가 있다. - 직렬화할 때, 클래스의 버전(serialVersionUID)을 자동계산해서 저장한다. - 클래스의 버전을 수동으로 관리하려면, 클래스 내에 정의해야 한다. - serialver.exe는 클래스의 serialVersionUID를 자동생성해준다. 44 44
감사합니다. http://www.javachobo.com Java 정석 의 정석 Chapter 14. 입출력(I/O) http://www.javachobo.com 감사합니다. 더 많은 동영상강좌를 아래의 사이트에서 구하실 수 있습니다. http://www.javachobo.com 이것으로 제 14 장 입출력에 대한 강의를 모두 마치겠습니다. 감사합니다. 이 동영상강좌는 비상업적 용도일 경우에 한해서 저자의 허가없이 배포하실 수 있습니다. 그러나 일부 무단전제 및 변경은 금지합니다. 관련문의 : 남궁성 castello@naver.com