🌱 오늘의 주제 : 직렬화(serialization)
🌱 직렬화(serialization)
- 직렬화란 객체를 데이터 스트림으로 만드는 것을 뜻한다.
- 객체에 저장된 데이터를 스트림에 쓰기위해 연속적인 데이터로 변환하는 것 직렬화라고한다.
- 반대로, 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화(deserialization)라고 한다.
🌱 ObjectInputStream, ObjectOutputStream
- 직렬화에는 ObjectOutputStream을 사용하고, 역직렬화에는 ObjectInputStream을 사용한다.
<직렬화 방법>
FileOutputStream fos = new FileOutputStream("objectfile.ser"); // 기반 스트림
ObjectOutputStream out = new ObjectOutputStream(fos); // 보조 스트림
out.writeObject(new UserInfo());
FileInputStream fis = new FileInputStream("objectfile.ser");
ObjectInputStream in = new ObjectInputStream(fis);
UserInfo info = (UserInfo)in.readObject(); // 형변환
🌱 직렬화가 가능한 클래스 만들기
- 직렬하고자 하는 클래스가 java.io.Serializable 인터페이스를 구현하도록 하면 된다.
public class SuperUserInfo implements Serializable {
String name;
String password;
}
public class UserInfo extends SuperUserInfo {
int age;
}
🌱 직렬화 대상에서 제외시키기 - transient
- 직렬하고자 하는 객체의 클래스에 직렬화가 안 되는 객체에 대한 참조를 포함하고 있다면, 제어자 transient를 붙여서 직렬화 대상에서 제외되도록 할 수 있다.
public class UserInfo implements Serializable {
String name;
transient String password; // 직렬화 대상에서 제외된다.
}
'Java' 카테고리의 다른 글
Java - TCP와 UDP (0) | 2023.04.13 |
---|---|
Java - 네트워킹, URL(Uniform Resource Locator) (0) | 2023.04.12 |
Java - BufferedReader와 BufferedWriter, InputStreamReader와 OutputStreamWriter, File (0) | 2023.04.11 |
Java - FileInputStream과 FileOutputStream, BufferedInputStream과 BufferedOutputStream, 문자 기반 스트림 - Reader , Writer (0) | 2023.04.10 |
Java - 입출력(I/O) 과 스트림(stream)이란? (0) | 2023.04.06 |