>  기사  >  Java  >  Java 언어의 직렬화 및 역직렬화 구현 방법

Java 언어의 직렬화 및 역직렬화 구현 방법

WBOY
WBOY원래의
2023-06-10 21:33:42809검색

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 클래스.

  1. Java.io.ObjectOutputStream 클래스

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();
        }
    }
}
  1. Java.io.ByteArrayOutputStream 클래스

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 클래스.

  1. Java.io.ObjectInputStream 클래스

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();
        }
    }
}
  1. Java.io.ByteArrayInputStream 클래스

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.