Java에서 객체 정렬화 및 반정렬화 자세히 보기

시리얼화(Serialization)는 객체의 상태 정보를 저장하거나 전송할 수 있는 형식으로 변환하는 프로세스입니다.일반적으로 하나의 대상을 하나의 저장 매체에 저장하는데, 예를 들어 파일이나 억체 버퍼 등이다.네트워크 전송 과정에서 바이트나 XML 등의 형식이 될 수 있다.바이트나 XML 인코딩 형식은 완전히 같은 객체를 복원할 수 있습니다.이 상반된 과정을 반서열화라고도 부른다.
Java 객체의 정렬화 및 반정렬화
Java에서 우리는 여러 가지 방식으로 대상을 만들 수 있으며, 대상이 회수되지 않으면 이 대상을 다시 사용할 수 있다.하지만 JVM의 더미 메모리에 있는 Java 객체가 생성됩니다.이러한 객체는 JVM이 실행 중인 경우에만 존재할 수 있습니다.JVM이 중지되면 이러한 객체의 상태도 손실됩니다.
그러나 실제 응용 장면에서 우리는 이러한 대상을 오래도록 유지하고 필요할 때 대상을 다시 읽을 수 있어야 한다.Java의 객체 정렬화는 이 기능을 구현하는 데 도움이 됩니다.
대상 서열화 메커니즘(object serialization)은 자바 언어에서 만들어진 대상 지속화 방식으로 대상 서열화를 통해 대상의 상태를 바이트 그룹으로 저장할 수 있고 필요할 때 이 바이트 그룹을 반서열화된 방식으로 다시 대상으로 전환할 수 있다.객체 정렬화는 JVM의 활성 객체와 바이트 배열(흐름) 간에 쉽게 변환할 수 있습니다.
자바에서 대상의 서열화와 반서열화는 RMI(원격 방법 호출) 및 네트워크 전송에 광범위하게 응용된다.
관련 인터페이스 및 클래스
Java는 개발자가 Java 대상을 서열화하고 반서열화하는 데 편리하도록 API를 제공합니다.여기에는 다음 인터페이스와 클래스가 포함됩니다.
  •          java.io.Serializable
  •   java.io.Externalizable
  •   ObjectOutput
  •   ObjectInput
  •   ObjectOutputStream
  •   ObjectInputStream
  • Serializable 인터페이스
  • 클래스는 자바를 실현합니다.io.Serializable 인터페이스는 정렬화 기능을 사용합니다.이 인터페이스가 실행되지 않은 클래스는 어떤 상태도 정렬하거나 반정렬할 수 없습니다.서열화 가능한 클래스의 모든 하위 유형 자체는 서열화 가능한 것이다.서열화 인터페이스는 방법이나 필드가 없고 서열화 가능한 의미를 표시하는 데만 사용됩니다.(이 인터페이스는 방법과 필드가 없는데 왜 이 인터페이스의 클래스를 실현해야만 서열화될 수 있습니까?)
    하나의 대상을 서열화하려고 시도할 때, Serializable 인터페이스를 지원하지 않는 대상을 만나면.이 경우 NotSerializableException이 제거됩니다.
    서열화된 클래스에 부류가 있다면, 부류에 정의된 변수를 동시에 영구화하려면, 부류도java를 통합해야 한다.io.Serializable 인터페이스.
    다음은 자바를 실현한 것입니다.io.Serializable 인터페이스의 클래스
    
    package com.hollischaung.serialization.SerializableDemos;
    import java.io.Serializable;
    /**
    * Created by hollis on 16/2/17.
    *  Serializable 
    */
    public class User1 implements Serializable {
    private String name;
    private int 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;
    }
    @Override
    public String toString() {
    return "User{" +
    "name='" + name + '\'' +
    ", age=" + age +
    '}';
    }
    }
    
    아래 코드를 통해 서열화 및 반서열화
    
    package com.hollischaung.serialization.SerializableDemos;
    import org.apache.commons.io.FileUtils;
    import org.apache.commons.io.IOUtils;
    import java.io.*;
    /**
    * Created by hollis on 16/2/17.
    * SerializableDemo1  SerializableDemo2   Serializable 
    */
    public class SerializableDemo1 {
    public static void main(String[] args) {
    //Initializes The Object
    User1 user = new User1();
    user.setName("hollis");
    user.setAge(23);
    System.out.println(user);
    //Write Obj to File
    ObjectOutputStream oos = null;
    try {
    oos = new ObjectOutputStream(new FileOutputStream("tempFile"));
    oos.writeObject(user);
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    IOUtils.closeQuietly(oos);
    }
    //Read Obj from File
    File file = new File("tempFile");
    ObjectInputStream ois = null;
    try {
    ois = new ObjectInputStream(new FileInputStream(file));
    User1 newUser = (User1) ois.readObject();
    System.out.println(newUser);
    } catch (IOException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } finally {
    IOUtils.closeQuietly(ois);
    try {
    FileUtils.forceDelete(file);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }
    //OutPut:
    //User{name='hollis', age=23}
    //User{name='hollis', age=23}
    이상은 본고의 전체 내용입니다. 여러분이 자바에서 대상의 서열화와 반서열화를 배우는 데 도움이 되기를 바랍니다.

    좋은 웹페이지 즐겨찾기