Input Source 혹은 Output Source를 갖는 순서화된 일련의 자료를 나타내는 추상적인 입출력 모델 -> Java I/O에선 입력 자료 또는 출력 자료의 타입이 무엇인지 아는 것이 가장 중요함.
I/O 관련 메소드는 IOException을 throw하도록 되어 있음 -> java.io 패키지 내의 모든 예외 클래스는 IOException의 하위 클래스.
UTF-8 : Unified Text File 웬만한 거 다 변환. 8바이트로 인코딩.
자바는 유니코드 사용
: 파일, 메모리, 네트우커, 다른 프로세스 또는 쓰레드
텍스트 데이터의 경우 :
표준 입출력 스트림 :
이진 데이터(Byte Data)를 쓰는데 관련된 모든 출력 스트림의 추상 슈퍼 클래스로 이진 데이터를 쓰는데 필요한 3가지의 기본적인 메소드가 선언되어 있음.
이외에 스트림 닫기, 플러싱하기 같은 기능을 지원하기 위한 메소드 포함.
이 클래스에는 write() 메소드가 추상메소드로 제공되어지고 있으므로 그 하위 클래스를 만들 경우에는 꼭 이 메소드를 재정의해야 함.
바이트 배열 쓰기 :
출력 스트림의 flushing과 닫기 :
출력스트림의 버퍼 : 메모리 버퍼의 사이즈별로 쌓아 두고, 버퍼가 가득 채워지면 모든 데이터를 한 번에 내버내도록 구성됨.
flush() 메소드는 버퍼에 데이터가 가득 차 있건 아니건 버퍼에서 강제로 밀어냄.
close() 메소드는 명시적으로 자바의 I/O 스트림을 닫아주는 메소드.
flush() -> close()
이진 데이터(Byte Data)를 읽어오는데 관련된 모든 입력 스트림의 추상 슈퍼 클래스로 이진 데이터를 읽어오는데 필요한 세 가지의 기본적인 메소드가 선언됨. 이외에 close(), flush(), 입력 건너뛰기, 특정 위치에 마크하고 리셋할 수 있는 기능을 지원하기 위한 메소드 포함.
이 클래스에는 read() 메소드가 추상메소드로 제공되어지므로 그 하위 클래스를 만들 경우 이 메소드를 재정의해야 함.
FileInputStream(String name) : 지정된 파일 이름을 가진 실제 파일과 연결된 스트림 생성
FileOutputStream(String name) : 지정된 파일 이름을 가진 실제 파일과 연결된 스트림 생성. 파일이 존재하지 않는 경우 파일 생성.
InputStream의 하위 클래스 만들기:
직렬화:
객체를 데이터 스트림으로 만드는 것으로 객체를 저장하거나 전송하기 위해 객체를 연속적인 데이터로 변환시킴.
객체의 인스턴스 변수를 저장하고 이를 다시 읽어 들이면 객체를 복원할 수 있다.