I/O Stream에 의해 제공됨
자바는 모든 IO를 이 IO Stream 클래스를 통해 처리
입출력 장치에 독립적인 입출력 방식
-> 어떤 장치든 자바 IO 클래스 사용 시 읽고 쓰기 가능
파일 디스크, 키보드, 메모리, 네트워크
입력 스트림 : 대상으로부터 자료를 읽어 들임
출력 스트림 : 대상으로 자료를 출력함
입력스트림 : FileInputstream, FileReader 등
출력스트림 : FileOuputstream, FileWriter 등
바이트 스트림 : 동영상, 음악 파일 등을 읽고 쓸 때
문자 스트림 : 한글 등 문자는 2바이트 단위로 처리
기반 스트림(저수준 스트림) : 대상에 직접 자료를 읽고 씀
ex) FileInputstream, FileOutputstream, FileReader, FileWriter 등
보조 스트림(Wrapper Stream) : 저수준 스트림 객체에 대한 레퍼런스, 추가적 기능 제공
ex) InputstreamReader, OutputstreamWriter 등
표준 출력(모니터) 스트림
System.out.printl("에러 메시지");
표준 출력(키보드) 스트림
int d = System.in.read(); //한 바이트 읽어내기
한글의 경우 InputStreamReader를 사용해야 함!
FileInputStream : 바이트 스트림이기 때문에 한글 적용 불가
실제로 읽고 쓰는 역할이 아닌 보조적인 기능을 추가하는 스트림
FilterInputStream과 FilterOutputStream이 보조 스트림의 상위 클래스
장식자 기능을 제공해 '데코레이터 패턴'으로 불림
Person으로 받기 위해 다운캐스팅하기
직렬화하고 싶지 않은 것은 transient 변수로 제외 가능
Externalizable : 읽고 쓰는 방식의 직접 구현 가능