내용으로 건너뛰기
권남
사용자 도구
로그인
사이트 도구
검색
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
추적:
java:serialization
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Java Serialization 직렬화 ====== * Serializable interface 구현 * 참조 : [[:serialization|Serialization 데이터 직렬화]] ===== Serializable 하지 않은 필드가 중간에 껴 있다면 ===== * ''Serializable'' 한 클래스에 non Serializable 필드가 껴 있다면 * 이 상황에서 Java 의 직렬화 기능을 사용하면 [[https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/Serializable.html|NotSerializableException]] 이 발생하게 된다. <code java> @Test @DisplayName("serialize : ") void serialize() throws IOException, ClassNotFoundException { Person person = new Person("나야나", new Age(41)); System.out.println("직접 생성 객체 : " + person); 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("역직렬화 객체 : " + deserializedPerson); } } } @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; } </code> 결과 <code> serialtest.SerializationTest$Age java.io.NotSerializableException: serialtest.SerializationTest$Age at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1185) </code> ===== serialVersionUID 읽기 ===== * [[http://www.tutorialspoint.com/java/io/objectstreamclass_getserialversionuid.htm|Java.io.ObjectStreamClass.getSerialVersionUID()]]<code java> // create a new object stream class for Integers ObjectStreamClass osc = ObjectStreamClass.lookup(Integer.class); // get the serial for Integers System.out.println("" + osc.getSerialVersionUID()); </code> * serialVersionUID는 Serializable 클래스에서 자동 생성되거나 다음 처럼 명시적 지정가능. 최근에는 자동 생성을 권장하는 추세.<code java> private static final long serialVersionUID = 12345L; </code> * Eclipse에서 serialVersionUID 없을 때 경고 없애기<code java> @SuppressWarnings("serial") public class SerializableClass implements Serializable { } </code>
java/serialization.txt
· 마지막으로 수정됨: 2022/11/29 16:17 저자
kwon37xi
문서 도구
문서 보기
이전 판
역링크
맨 위로