문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
java:serialization [2014/06/13 05:16] kwon37xi [serialVersionUID 읽기] |
java:serialization [2022/11/29 16:17] (현재) kwon37xi |
||
---|---|---|---|
줄 1: | 줄 1: | ||
====== Java Serialization 직렬화 ====== | ====== Java Serialization 직렬화 ====== | ||
* Serializable interface 구현 | * Serializable interface 구현 | ||
+ | * 참조 : [[: | ||
+ | ===== Serializable 하지 않은 필드가 중간에 껴 있다면 ===== | ||
+ | * '' | ||
+ | * 이 상황에서 Java 의 직렬화 기능을 사용하면 [[https:// | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | @Test | ||
+ | @DisplayName(" | ||
+ | void serialize() throws IOException, | ||
+ | |||
+ | |||
+ | Person person = new Person(" | ||
+ | System.out.println(" | ||
+ | try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { | ||
+ | try ( ObjectOutputStream oos = new ObjectOutputStream(bos)) { | ||
+ | oos.writeObject(person); | ||
+ | } | ||
+ | |||
+ | try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()))) { | ||
+ | final Person deserializedPerson = (Person) ois.readObject(); | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | @AllArgsConstructor | ||
+ | @Getter | ||
+ | @Setter | ||
+ | @ToString | ||
+ | public static class Person implements Serializable { | ||
+ | private String name; | ||
+ | private Age age; | ||
+ | } | ||
+ | |||
+ | |||
+ | @AllArgsConstructor | ||
+ | @Getter | ||
+ | @Setter | ||
+ | @ToString | ||
+ | public static class Age { | ||
+ | private int age; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 결과 | ||
+ | < | ||
+ | serialtest.SerializationTest$Age | ||
+ | java.io.NotSerializableException: | ||
+ | at java.base/ | ||
+ | </ | ||
===== serialVersionUID 읽기 ===== | ===== serialVersionUID 읽기 ===== | ||
* [[http:// | * [[http:// | ||
줄 12: | 줄 63: | ||
* serialVersionUID는 Serializable 클래스에서 자동 생성되거나 다음 처럼 명시적 지정가능. 최근에는 자동 생성을 권장하는 추세.< | * serialVersionUID는 Serializable 클래스에서 자동 생성되거나 다음 처럼 명시적 지정가능. 최근에는 자동 생성을 권장하는 추세.< | ||
private static final long serialVersionUID = 12345L; | private static final long serialVersionUID = 12345L; | ||
- | </code. | + | </code> |
* Eclipse에서 serialVersionUID 없을 때 경고 없애기< | * Eclipse에서 serialVersionUID 없을 때 경고 없애기< | ||
@SuppressWarnings(" | @SuppressWarnings(" |