파일로부터 바이트 단위로 저장할 떄 사용
그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 데이터를 파일로 저장
OutputStream의 하위 클래스로 OutputStream과 사용 방법 동일
FileOutputStream객체가 생성될 떄 파일가 직접 연결됨, 만약 파일이 존재하면 자동으로 생성하지만, 이미 파일이 존재하는 경우 파일을 덮어쓰는 단점이 있음.
FileOutputStream fos = new FileOutputStream("C:/data/test.txt");
만일 기존 파일에 이어서 계속 작성하고 싶다면 아래 예제처럼 객체 생성 시 가능
FileOutputStream fos = new FileOutputStream("C:/data/test.txt", true);
텍스트 파일로부터 문자 단위로 읽을 떄 사용
텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 읽기 불가능
Reader의 하위 클래스로 Reader와 사용 방법 동일
FileReader객체가 생성될 떄 파일과 직접 연결 됨, 만약 파일이 존재하지 않으면 FileNotFoundException이 발생하므로 예외처리 필수
텍스트 파일로부터 문자 단위로 저장할 떄 사용
텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 저장 불가능
Writer의 하위 클래스로 Writer과 사용 방법 동일
FileWriter객체가 생성될 떄 파일과 직접 연결 됨.
실제 읽고 쓰는 스트림이 아닌 보조적인 기능을 추가하는 스트림
데코레이션 패턴
FilterInputStream과 FilterOutputStream이 보조스트림의 상위 클래스
생성자의 매개변수로 또 다른 스트림을 가짐
문자 변환(InputStreamReader/OutputStreamWriter)
입출력 성능(BufferedInputStream/BufferedOutputStream)
기본 데이터 타입 출력(DataInputStream/DataOutputStream)
객체 입출력(ObjectInputStream/ObjectOutputStream) 등의 기능을 제공하는 보조스트림이 있음
FileInputStream fis = new FileInputStream("Sample.txt"); //기반 스트림 생성
BufferedInputStream bis = new BufferedInputStream(fis); //보조스트림 생성
bis.read(); //보조스트림으로부터 데이터 읽어옴
소스 스트림이 바이트 기반 스트림이지만 데이터가 문자일 경우 사용
Reader와 Writer는 문자 단위로 입출력을 하기 떄문에 데이터가 문자인 경우 바이트 기반 스트림보다 편리하게 사용 가능.
기본 자료형 별 데이터 읽고 쓰기가 가능하도록 기능 제공
단, 입력된 자료형의 순서와 출력될 자료형의 순서 일치
객체를 파일 또는 네트워크로 입출력할 수 있는 기능 제공
단, 객체는 문자가 아니므로 바이트 기반 스트림으로 데이터를 변경해주는 직렬화 필수
직렬화(Serialization)
Serialization 인터페이스를 implement하여 구현
객체 직렬화 시 private 필드를 포함한 모든 필드를 바이트로 변환하지만
transient키워드를 사용한 필드는 직렬화에서 제외
역직렬화(Deserialization)
직렬화된 객체를 역직렬화할 때는 직렬화했을 떄와 같은 클래스 사용
단, 클래스 이름이 같더라도 클래스 내용이 변경된 경우 역직렬화 실패
serialVersionUID 필드
직렬화한 클래스와 같은 클래스임을 알려주는 식별자 역할로 컴파일 시 JVM이 자동으로 serialVersionUID 정적 필드를 추가해줘 별도로 작성하지 않아도 오류는 나지 않지만 자동 생성 시 역직렬화해서 예상하지 못한 InvailedClassException을 유발할수 있어 명시를 권장.텍스트
출력 버퍼를 비울떄 flush()메서드를 사용
close()메서드 내부에서 flush()가 호출되므로 close()메서드가 호출되면 출력버퍼가 비워짐
바이트 단위로 읽거나 쓰는 자료를 문자로 변환해주는 보조 스트림
FileInputStream(바이트 스트림)으로 읽은 자료를 문자와 변환하는 예
1차 스트림 : 디바이스에 직접 연결되는 스트림
2차 스트림 : 1차 스트림과 연결을 통해 디바이스에 연결되는 스트림
입력 스트림 : 디바이스로부터 데이터를 읽어오는 스트림
출력 스트림 : 디바이스로 데이터를 출력하는 스트림
바이트 스트림 : 1Byte 단위로 입력, 출력하는 스트림
문자 스트림 : 한 문자(2Byte) 단위로 입력, 출력하는 스트림
스트림의 기능을 향상시키거나 새로운 기능을 추가시킴
직접적인 데이터 입출력을 할 수 없다.
<각 클래스별로 정의된 메소드 알아서 공부>