Developer/Java
24. JAVA binary 스트림과 character 스트림의 비교
Jeremy.Park
2014. 7. 3. 00:20
/* binary 스트림과 character 스트림의 비교
* 1) binary 스트림 클래스
* - 바이트단위로 데이터를 읽고 쓴다.
* - InputStream, outputStream의 자손 클래스들이다.
* - 클래스 이름 뒤에 InputStream/OutputStream이 붙는다.
*
* 2) character 스트림 클래스
* - 문자단위( Unicode 2byte)로 데이터를 읽고 쓴다.
* - Reader/Writer의 자손 클래스들이다.
* - 클래스 이름 뒤에 Reader/Writer가 붙는다.
* - 쓰기 => Unicode를 운영체제의 기본 인코딩으로 변환하여 출력한다.
* - 입력 => 읽은 데이터를 유니코드로 변환하여 리턴한다.
*/
FileOutputStream
DataOutputStream
/* Data Processing Stream Class
* - 중간에서 다른 스트림 객체에게 데이터를 가공하여 전달.
* 다른 스트림 객체로부터 읽어들인 데이터를 가공하여 리턴
* - 직접 파일, 메모리 등으로 입/출력 불가능
*
* 예) DataInputStream, DataOutputStream
* - byte, short, int 등의 데이터를 좀 더 쉽게 입/출력할 수 있는 기능 제공
*/
FileReader
// 텍스트 데이터 읽기를 통한 동작 비교
// 문자 스트림으로 읽기
// 읽어들인 데이터는 유니코드로 변환한다.
// - 영어는 1바이트 읽어서 2바이트 유니코드로 변환
// - 한글 (UTF-8)은 3바이트 읽어서 2바이트 유니코드로 변환
// 변환한 유니코드를 리턴한다.
Serializable
// 바이트 배열로 출력할 때 현재 클래스의 버전을 기록한다.
// => 읽는 쪽에서 버전에 맞추어 읽을 수 있다.
class Student implements Serializable {
private static final long serialVersionUID = 1L ;
}
// ObjectOutputStream
// - 인스턴스의 클래스 정보와 데이터가 함께 출력된다.
// - Serialize가 허용된 인스턴스의 경우 출력 가능
// => 허용되지 않은 인스턴스를 출력하려 한다면
// => NotSerializableException 발생
// - 해결 방법 : 클래스에 Serialize를 허용한다고 선언할것.
// 문법 : class 클래스명 implements Serializable { ... }