Java의 직렬화 및 역직렬화
직렬화는 객체의 상태를 네트워크를 통해 전송하거나 디스크에 영구적으로 저장할 수 있도록 객체의 상태를 바이트 스트림으로 변환하는 프로세스입니다. 역직렬화는 직렬화된 바이트 스트림을 객체로 복원하는 프로세스입니다. Java에서는 직렬화 및 역직렬화는 ObjectInputStream 및 ObjectOutputStream을 통해 구현됩니다.
연재가 왜 필요한가요?
현대 애플리케이션에서는 객체의 상태를 서로 다른 시스템, 프로세스 및 스레드 간에 전송해야 하는 경우가 많습니다. 예를 들어, 분산 시스템에서는 개체를 서로 다른 서버 간에 전송해야 할 수도 있습니다. 또 다른 예는 개체를 캐시에 저장할 때 디스크에 저장할 수 있도록 개체를 직렬화해야 하는 경우입니다.
Java의 직렬화
Java는 직렬화를 구현하기 위한 직렬화 가능 인터페이스를 제공합니다. 직렬화 가능 인터페이스는 메소드가 없는 마커 인터페이스일 뿐이며 컴파일러에게 이 클래스가 직렬화 가능하다는 것을 알려줄 뿐입니다. 클래스가 직렬화 가능 인터페이스를 구현하는 경우 해당 클래스의 객체를 직렬화할 수 있습니다. 예:
public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } }
위의 예에서 Person 클래스는 직렬화 가능 인터페이스를 구현하여 클래스가 직렬화될 수 있음을 나타냅니다.
Java의 역직렬화
Java의 역직렬화는 직렬화된 바이트 스트림을 객체로 복원하는 프로세스입니다. 역직렬화는 ObjectInputStream 클래스를 사용하여 구현할 수 있습니다. 예:
try { FileInputStream fileIn = new FileInputStream("person.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); Person person = (Person) in.readObject(); in.close(); fileIn.close(); } catch (IOException i) { i.printStackTrace(); } catch (ClassNotFoundException c) { c.printStackTrace(); }
위의 예에서는 먼저 FileInputStream 개체를 만든 다음 이를 ObjectInputStream 생성자에 전달하여 ObjectInputStream 개체를 만듭니다. 그런 다음 readObject() 메서드를 사용하여 ObjectInputStream에서 객체를 읽습니다. 마지막으로 ObjectInputStream과 FileInputStream을 닫습니다.
역직렬화할 때 직렬화된 클래스가 있어야 한다는 점에 유의해야 합니다. 직렬화된 클래스가 없으면 ClassNotFoundException 예외가 발생합니다.
Java의 직렬화 및 역직렬화는 매우 중요하므로 서로 다른 시스템, 프로세스 및 스레드 간에 객체를 전달할 수 있습니다. 동시에 Java는 객체의 직렬화 및 역직렬화 동작을 제어하기 위한 임시 메서드, writeObject() 및 readObject() 메서드와 같은 몇 가지 메서드도 제공합니다. 직렬화 및 역직렬화는 성능에 큰 영향을 미치므로 적절한 경우에는 사용을 피해야 합니다.
위 내용은 Java의 직렬화 및 역직렬화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!