직렬화(Serialize)
자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 변환하는 기술
역직렬화 - byte로 변환된 Data를 원래대로 Object나 Data로 변환하는 기술
직렬화 대상 클래스를 Serizalizable 인터페이스를 구현하여 정의
직렬화하지 않을 속성(ex-보안키)은 transient 예약어를 통해 처리 가능
직렬화 대상인 User 클래스 정의
class User implements Serializable{
private String name;
private transient String password; // 패스워드는 보안상 문제로 직렬화하지 않음
public int age;
public User(String name,String password, int age) {
this.name=name;
this.password=password;
this.age=age;
}
public String toString() {
return "("+name+", "+password+", "+age+")";
}
}
직렬화 메소드 정의
ObjectOutputStream이 객체를 직렬화하는 핵심 클래스이다.
public static void doSerializable() {
try {
FileOutputStream fos = new FileOutputStream("user");
ObjectOutputStream oos = new ObjectOutputStream(fos);
User user=new User("name","1234",20);
oos.writeObject(user);//usr 객체 직렬화
System.out.println("직렬화 수행!");
oos.close();
}catch(Exception ex)
{
ex.printStackTrace();
}
}
역직렬화 메소드 정의
public static Object undoSerializable() throws IOException, ClassNotFoundException{
FileInputStream fis = new FileInputStream("user");
ObjectInputStream in=new ObjectInputStream(fis);
User user=(User)in.readObject();//객체 역직렬화
System.out.println(user.toString());//출력
in.close();
return user;
}
Main.java
public static void main(String[] args) throws ClassNotFoundException, IOException {
doSerializable();
undoSerializable();
}
Result
직렬화 수행!
(name, null, 20)
두 번째 줄의 출력을 통해 password를 제외한 primitive type 속성이 정상적으로 직렬화-역직렬화 된 것을 확인할 수 있다.
'이론 > 알고리즘&자료구조&Java' 카테고리의 다른 글
[Java8] 자바의 람다 표현식 - 자바로도 함수형 프로그래밍을 할 수 있다 (0) | 2018.11.06 |
---|---|
[Java] Thread in java(간단 사용 예제) (0) | 2018.09.20 |
[LocalDate - JAVA 8] LocalDate 정리 (0) | 2018.09.11 |
[백준 알고리즘 - 1806] 부분합 + StringTokenizer 정리 - java (0) | 2018.09.04 |
[JAVA] String/StringBuffer/StringBuilder (0) | 2018.08.27 |