Java 언어는 플랫폼 독립적이고, 배우고 사용하기 쉽고, 신뢰성이 높은 객체 지향 프로그래밍 언어입니다. 그 중 객체 직렬화와 역직렬화는 자바 언어에서 매우 중요한 기능으로, 서로 다른 JVM에 객체를 쉽게 전송하거나 저장할 수 있다. 이 기사에서는 Java 언어 직렬화 및 역직렬화 구현 방법을 소개합니다.
1. 직렬화의 개념
직렬화는 객체를 네트워크에서 전송하거나 저장할 수 있도록 바이트 시퀀스로 변환하는 프로세스를 말합니다. 직렬화 프로세스는 다양한 플랫폼에서의 전송 및 처리를 위해 Java 객체를 XML, JSON, 바이너리 스트림 등과 같은 공통 형식으로 변환할 수 있습니다. Java 언어에서는 Java.io.Serialized 인터페이스를 사용하여 직렬화를 구현할 수 있습니다.
2. Java.io.Serialized 인터페이스
Java.io.Serialized 인터페이스는 Java 언어에서 제공하는 표시 인터페이스로, 직렬화할 수 있는 클래스를 표시하는 데 사용됩니다. 이 인터페이스를 구현하는 클래스만 직렬화 및 역직렬화 작업을 수행할 수 있습니다. 이 인터페이스는 어떤 메소드도 구현하지 않으며 단지 이 클래스가 직렬화 가능하다는 것을 JVM에 알리는 표시 역할을 합니다.
Java.io.Serialized 인터페이스를 구현하는 클래스는 다음 조건을 충족해야 합니다.
1. 클래스는 직렬화 가능해야 합니다. 즉, 클래스의 상태를 바이트 스트림에 쓸 수 있습니다.
2. 클래스에는 매개변수가 없는 생성자가 있어야 합니다.
3. 이 클래스의 모든 비정적 멤버 변수는 직렬화 가능해야 합니다.
예를 들어 다음은 Java.io.Serialized 인터페이스를 구현하는 클래스의 예입니다.
import java.io.Serializable; public class Person implements Serializable { private String name; // 可序列化的成员变量 private int age; // 可序列化的成员变量 public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
3. 직렬화 구현 방법
Java 언어는 Java.io.ObjectOutputStream 클래스와 두 가지 직렬화 구현 방법을 제공합니다. Java.io.ByteArrayOutputStream 클래스.
Java.io.ObjectOutputStream 클래스는 Java 언어에서 제공하는 직렬화 클래스입니다. 이 클래스는 Java 객체를 바이트 스트림으로 직렬화하는 방법과 이러한 바이트를 OutputStream에 쓸 수 있는 가능성을 제공합니다. 다음은 Person 객체를 바이트 스트림으로 직렬화하고 이를 파일에 쓰는 메서드의 예입니다.
import java.io.FileOutputStream; import java.io.ObjectOutputStream; public class SerializeDemo { public static void main(String[] args) { Person person = new Person("Tom", 20); try { FileOutputStream fos = new FileOutputStream("person.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(person); oos.close(); fos.close(); System.out.println("Person对象已经序列化到person.ser中。"); } catch (Exception e) { e.printStackTrace(); } } }
Java.io.ByteArrayOutputStream 클래스는 Java 언어에서 제공됩니다. 직렬화 종류의 경우. 이 클래스는 Java 객체를 바이트 배열로 직렬화하는 방법과 이러한 바이트를 ByteArrayOutputStream에 저장할 수 있는 가능성을 제공합니다. 다음은 Person 객체를 바이트 스트림으로 직렬화하여 바이트 배열에 저장하는 메서드의 예입니다.
import java.io.ByteArrayOutputStream; import java.io.ObjectOutputStream; public class SerializeDemo { public static void main(String[] args) { Person person = new Person("Tom", 20); try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(person); byte[] byteArray = bos.toByteArray(); oos.close(); bos.close(); System.out.println("Person对象已经序列化到字节数组中。"); } catch (Exception e) { e.printStackTrace(); } } }
IV. 역직렬화 구현 메서드
Java 언어는 두 가지 역직렬화 구현 메서드를 제공합니다. Java.io.ObjectInputStream 클래스 및 Java.io.ByteArrayInputStream 클래스.
Java.io.ObjectInputStream 클래스는 Java 언어에서 제공하는 역직렬화 클래스입니다. 이 클래스는 InputStream에서 바이트를 읽고 이를 Java 객체로 역직렬화하는 메서드를 제공합니다. 다음은 파일에서 바이트 스트림을 읽고 이를 Person 객체로 역직렬화하는 메서드의 예입니다.
import java.io.FileInputStream; import java.io.ObjectInputStream; public class DeserializeDemo { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("person.ser"); ObjectInputStream ois = new ObjectInputStream(fis); Person person = (Person) ois.readObject(); ois.close(); fis.close(); System.out.println("从person.ser文件中反序列化出了一个Person对象。"); System.out.println("Person对象的name是:" + person.getName()); System.out.println("Person对象的age是:" + person.getAge()); } catch (Exception e) { e.printStackTrace(); } } }
Java.io.ByteArrayInputStream 클래스는 Java 언어에서 제공됩니다. 직렬화된 클래스를 역직렬화하기 위한 것입니다. 이 클래스는 바이트 배열에서 바이트를 읽고 이를 Java 객체로 역직렬화하는 메서드를 제공합니다. 다음은 바이트 배열을 Person 객체로 역직렬화하는 방법의 예입니다.
import java.io.ByteArrayInputStream; import java.io.ObjectInputStream; public class DeserializeDemo { public static void main(String[] args) { try { Person person = null; byte[] byteArray = // 从其他途径获取的Person对象的字节数组 ByteArrayInputStream bais = new ByteArrayInputStream(byteArray); ObjectInputStream ois = new ObjectInputStream(bais); person = (Person) ois.readObject(); ois.close(); bais.close(); System.out.println("从字节数组中反序列化出了一个Person对象。"); System.out.println("Person对象的name是:" + person.getName()); System.out.println("Person对象的age是:" + person.getAge()); } catch (Exception e) { e.printStackTrace(); } } }
간단히 말해서 Java 언어의 직렬화 및 역직렬화 기능은 서로 다른 JVM 또는 저장소 간에 객체를 쉽게 전송할 수 있는 매우 중요한 기능입니다. 직렬화 및 역직렬화는 Java.io.Serialized 인터페이스를 구현하고 Java.io.ObjectOutputStream 클래스 및 Java.io.ObjectInputStream 클래스를 사용하여 수행됩니다. 동시에 Java.io.ByteArrayOutputStream 클래스와 Java.io.ByteArrayInputStream 클래스도 이러한 작업을 구현할 수 있습니다.
위 내용은 Java 언어의 직렬화 및 역직렬화 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!