1. 직렬화
- 직렬화(Serializtion)란? 객체를 데이터 스트림으로 만드는 것을 말한다.
- 즉, 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것이다.
- 반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화(deserialization) 라고 한다.
2. ObjectInputStream과 ObjectOutputStream
- 직렬화는 ObjectOutputStream을, 역직렬화는 ObjectInputStream을 사용한다.
- ObjectInputStream과 ObjectOutputStream은 InputStream과 OutputStream을 직접 상속받지만,
기반 스트림을 필요로 하는 보조 스트림이다.
- 그래서 객체를 생성할 때, 기반(주) 스트림을 지정해야 한다.
- 만약 직렬화(파일에 객체 저장)을 하고싶다면 아래의 예시 코드를 보자.
FileOutputStream fos = new FileOutputStream("objectfile.ser");
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(new UserInfo());
( 위의 코드를 해석하면, objectfile.ser이라는 파일에 UserInfo 객체를 직렬화하여 저장한다. )
- 반대로, 역직렬화는 아래의 예시 코드처럼 해야한다.
FileInputStream fis = new FileInputStream("objectfile.ser");
ObjectInputStream in = new ObjectInputStream(fis);
UserInfo info = (UserInfo) in.readObject();
- readObject()와 writeObject() 이외에도 여러가지 타입의 값을 입출력할 수 있는 메서드를 제공한다.
( ex) readDouble, WriteBytes 등 )
( defaultReadObject() 와 defaultWriteObject()는 자동 직렬화를 수행한다. )
- 객체를 직렬화/역직렬화하는 작업은 객체의 모든 인스턴스 변수가 참조하는 모든 객체에 대한 것이기
때문에 상당히 복잡하며 시간도 오래걸리므로, 아래와 같은 메서드 2개를 직접 구현해야 한다.
(1) private void writeObject(ObjectOutputStream out) throws IOException{
}
(2) private void readObject(ObjectInputStream in) throws IOException{
}
다음장
직렬화가 가능한 클래스 만들기 - Serializable, transient (1) (tistory.com)
직렬화가 가능한 클래스 만들기 - Serializable, transient (1)
1. 직렬화가 가능한 클래스를 만드는 방법 - 직렬화하고자 하는 클래스가 java.io.Serializable 인터페이스를 구현하도록 하면 된다. - 그저 아래 코드처럼 따로 구현할 필요없이 implements만 해주면 된
kind-coding.tistory.com
'자바 > 입출력 IO' 카테고리의 다른 글
직렬화가 가능한 클래스 만들기 - Serializable, transient (2) (0) | 2022.04.29 |
---|---|
직렬화가 가능한 클래스 만들기 - Serializable, transient (1) (0) | 2022.04.29 |
표준 입출력과 File: File(4) (0) | 2022.04.28 |
표준 입출력과 File: File(3) (0) | 2022.04.28 |
표준 입출력과 File: File(2) (0) | 2022.04.28 |