I/O 대상 기준 - 입력 스트림, 출력 스트림
자료의 종류 - 바이트 스트림, 문자 스트림 (2바이트 씩 처리)
스트림의 기능 - 기반 스트림 (대상에 직접 자료를 읽고 쓰는 기능), 보조 스트림 (읽고 쓰는 기능은 없지만 추가적인 기능을 제공, 데코레이터 패턴으로 사용)
InputStream - 바이트 단위 입력 스트림 최상위 클래스
OutputStream - 바이트 단위 출력 스트림 최상위 클래스
Reader - 문자 단위로 읽는 최상위 스트림
Writer - 문자 단위로 쓰는 최상위 스트림
-실제 읽고 쓰는 스트림이 아닌 보조적인 기능을 추가하는 스트림이다.
FilterInputStream과 FilterOutputStream이 보조 스트림의 최상위 클래스이다.
생성자의 매개 변수로 또 다른 스트림을 가진다. 데코레이터 패턴으로 사용할 수 있다.
-> 바이트 단위 파일 입력 스트림(기반 스트림) + 문자로 변환 기능 추가(보조 스트림) + 버퍼링 기능 추가(보조 스트림)
-Buffered 스트림: 내부에 8192 바이트 배열을 가지고 있다. 읽거나 쓸 때 속도가 빠르다.
-DataInputStream/DataOutputStream: 자료가 저장된 상태 그대로 자료형을 유지하며 읽거나 쓰는 기능을 제공하는 스트림이다.
-File 클래스: 파일 개념을 추상화한 클래스로 입출력 기능은 없고 파일의 속성, 경로, 이름 등을 알 수 있다.
-RandomAccessFile 클래스: 입출력 클래스 중 유일하게 파일 입출력을 동시에 할 수 있는 클래스이다. 파일 포인터가 있어서 읽고 쓰는 위치의 이동이 가능하고 다양한 자료형에 대한 메서드가 제공된다.
인스턴스의 상태를 그대로 저장하거나 네트웍으로 전송하고 이를 다시 복원하는 방식이다.
ObjectInputStream과 ObjectOutputStream을 사용한다.
인스턴스의 내용이 외부로 유출되는 것이므로 객체의 직렬화 가능 여부를 구현 코드가 없는 mark interface를 통해 명시해야 한다. (implements Serializable)
transient 키워드
-해당 키워드로 선언한 변수는 직렬화할 수 없다.
Externalizable 인터페이스
-readExternal(ObjectInput in), writeExternal(ObjectOutput out) 메서드를 구현하는데 직접 읽고/쓰기를 구현할 수 있다.