1. 입출력(I/O)
1.1. 입출력(I/O)과 스트림(stream)
- 입출력이란?
- 입력과 출력을 줄여 부르는말
- 두 대상 간의 데이터를 주고 받는 것
- 스트림이란?
- 데이타를 운반하는데 사용되는 연결통로
- 연속적인 데이터의 흐름을 물에 비유해서 붙여진 이름
- 하나의 스트림으로 입출력을 동시에 수행할 수 없다.(단방향 통신)
- 입출력을 동시에 수행하려면 2개의 스트림이 필요하다.
1.2. 바이트기반 스트림 - InputStream, OutputStream
- 데이터를 바이트단위로 주고 받는다.
1.3. 보조스트림
- 스트림의 기능을 향상시키거나 새로운 기능을 추가하기 위해 사용
- 독립적으로 입출력을 수행할 수 없다.
1.4. 문자기반 스트림 - Reader, Writer
- 입출력 단위가 문자인 스트림, 문자기반 스트림의 최고조상
2. 바이트기반 스트림
2.1. InputStream과 OutputStream
- InputStream(바이트기반 입력스트림의 최고 조상)의 메서드
- OutputStream(바이트기반 출력스트림의 최고 조상)의 메서드
2.2. ByteArrayInputStream과 ByteArrayOutputStream
- 바이트배열에 데이터를 입출력하는 바이트기반 스트림
2.2. ByteArrayInputStream과 ByteArrayOutputStream
2.3. FileInputStream과 FileOutputStram
- 파일에 데이터를 입출력하는 바이트기반 스트림
3. 바이트기반 보조스트림
3.1. FilterInputStream과 FilterOutputStram
- 모든 바이트기반 보조스트림의 최고조상
- 보조스트림은 자체적으로 입출력을 수행할 수 없다.
- 상속을 통해 FilterInputStream/FilterOutputStream의 read()와 write()를 원하는 기능대로 오버라이딩해야한다.
3.2. BufferedInputStream과 BufferedOutputStream
- 입출력 효율을 높이기 위해 버퍼를 사용하는 보조스트림
- 보조스트림을 닫으면 기반스트림도 닫힌다.
3.3. DataInputStream과 DataOutputStream
- 기본형 단위로 읽고 쓰는 보조스트림
- 각 자료형의 크기가 다르므로 출력할 때와 입력할 때 순서에 주의
3.4. SequenceInputStream
- 여러 입력스트림을 연결해서 하나의 스트림처럼 다룰 수 있게 해준다.
3.5. PrintStream
- 데이터를 다양한 형식의 문자로 출력하는 기능을 제공하는 보조스트림
- System.out과 System.err이 PrintStream이다.
- PrintStream보다 PrintWriter를 사용할 것을 권장한다.
4. 문자기반 스트림
4.1. Reader와 Writer
- Reader(문자기반 입력스트림의 최고 조상)의 메서드
- Writer(문자기반 출력스트림의 최고 조상)의 메서드
4.2. FileReader와 FileWriter
- 문자기반의 파일 입출력, 덱스트 파일의 입출력에 사용한다.
4.3. PipedReader와 PidedWriter
- 프로세스(쓰레드)간의 통신(데이터를 주고 받음)에 사용한다.
4.4. StringReader와 StringWriter
- CharArrayReader, CharArrayWriter처럼 메모리의 입출력에 사용한다.
- StringWriter에 출력되는 데이터는 내부의 StringBuffer에 저장된다.
5. 문자기반 보조스트림
5.1. BufferedReader와 BufferedWriter
- 입출력 효율을 높이기 위해 버퍼를 사용하는 보조스트림
- 라인 단위의 입출력이 편리하다.
5.2. InputStreamReader와 OutputStreamWriter
- 바이트기반스트림을 문자기반스트림처럼 쓸 수 있게 해준다.
- 인코딩을 변환하여 입출력할 수 있게 해준다.
6. 표준입출력과 File
6.1. 표준입출력 - System.in, System.out, System.err
- 콘솔을 통한 데이터의 입출력을 표준 입출력이라 한다.
- JVM이 시작되면서 자동적으로 생성되는 스트림이다.
6.2. RandomAccessFile
- 하나의 스트림으로 파일에 입력과 출력을 모두 수행할 수 있는 스트림
- 다른 스트림들과 달리 Object의 자손이다.
6.3. File - 생성자와 경로관련 메서드
- 파일과 디렉토리를 다루는데 사용되는 클래스
6.3. File - 파일의 속성, 생성, 삭제, 목록
7. 직렬화(Serialization)
7.1. 직렬화란?
- 객체를 연속적인 데이터로 변환하는 것 반대과정은 역직렬화라고 한다.
- 객체의 인스턴스변수들의 값을 일렬로 나열하는 것
- 객체를 저장히기 위해서는 객체를 직렬화해야 한다.
- 객체를 저장한다는 것은 객체의 모든 인스턴스변수의 값을 저장하는 것
7.2. ObjectInputStreeam, ObjectOutputStream
7.3. 직렬화 가능한 클래스 만들기
7.4. 직렬화 가능한 클래스의 버전관리
'프로그램 이론 > JAVA' 카테고리의 다른 글
[JAVA]네트워킹(Networking) (0) | 2018.05.29 |
---|---|
[JAVA]람다와 스트림(Lambda & Stream) (0) | 2018.05.29 |
[JAVA]AWT와 애플릿 (0) | 2018.05.28 |
[JAVA]쓰레드(Thread) (0) | 2018.05.28 |
[JAVA]지네릭스, 열거형, 애너테이션 (0) | 2018.05.28 |