자바의 정석 chapter 15

inho ha·2022년 3월 17일
0

자바의 정석

목록 보기
18/18

입출력

컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것

스트림

데이터를 운반하는데 사용되는 연결통로
단방향통신만 가능해서 입출력을 위해서는 스트림 두개 필요
queue처럼 선입선출

보조 스트림

데이터를 입출력할 수는 없지만 스트림의 기능을 향상시키거나 새로운 기능을 추가할 수 있다

BufferedInputStream 으로 버퍼를 제공하여 FileInputStream을 보조할 수 있다.

InputStream method

OutputStream method

프로그램이 종료될 때, 사용하고 닫지 않은 스트림을 JVM이 자동적으로 닫아줌
그래도 스트림 사용하고 나면 close()로 닫아주는것이 좋음
메모리를 사용하는 stream 과 표준 입출력 스트림은 닫아주지 않아도 됨

DataStream

데이터 스트림은 데이터를 읽고 쓸때 byte단위가 아닌 8가지 기본 자료형 단위로 읽고 쓸수 있다.

SequenceInputStream

여러개의 입력스트림을 연속적으로 연결해서 하나의 스트림으로부터 데이터를 읽는 것과 같이 처리할 수 있도록 도와준다.
큰 파일을 여러개의 작은 파일로 나누었다가 하나의 파일로 합치는 것과 같은 작업을 수행할 때 사용하면 좋다.

PrintStream

데이터를 기반스트림에 다양한 형태로 출력할 수 있는 메서드 제공

JDK1.1부터는 PrintWriter를 사용하는 것이 좋다.

Reader, Writer

byte 대신 char 를 사용하는 문자기반 스트림

Reader는 특정 인코딩을 읽어서 유니코드로 변환을 자동적으로 처리함
Writer는 유니코드를 특정 인코딩으로 변환하여 저장함

표준입출력

자바에서는 표준입출력을 위해 3가지 입출력 스트림 제공
System.in, System.out, System.err
자바 어플리케이션을 실행하면 자동적으로 생성되어 개발자가 따로 생성 코드 작성 없이 사용가능

setOut(), setErr(), setIn() 으로 출력 스트림을 변경할 수 있다.

RandomAccessFile

파일의 어느 위치에나 읽기/쓰기가 가능하다.
다른 입출력 클래스들은 입출력소스에 순차적으로 읽기쓰기가 가능

내부적으로 파일 포인터를 사용한다.

File

파일이나 디렉토리를 다룰때 사용하는 클래스

직렬화

객체에 저장된 데이터를 스트림에 쓰기위해 연속적인 데이터로 변환하는 것
ObjectInputStream 사용

역직렬화 : 스트림으로부터 데이터를 읽어서 객체를 만드는 것
ObjectOutputStream 사용

직렬화 가능한 클래스 만들기 위해서는 Serializable 인터페이스 구현해야함
인스턴스 변수중에 직렬화 안되는 객체는 transient 로 표시해줘야함

직렬화 가능한 객체가 수정되면 직렬화에서 오류가 발생할 수 있으므로 클래스 버전관리를 해줘야한다.

profile
iha / ian / inho ha

0개의 댓글