>  기사  >  Java  >  Java의 직렬화 및 역직렬화에 대한 간단한 예

Java의 직렬화 및 역직렬화에 대한 간단한 예

黄舟
黄舟원래의
2017-01-20 11:13:351331검색

직렬화 및 역직렬화는 Java 객체와 바이트 시퀀스의 상호 변환을 의미하며 일반적으로 바이트 시퀀스를 저장하거나 전송할 때 사용됩니다. 다음은 Java에서 직렬화 및 역직렬화의 두 가지 간단한 예입니다. 시퀀스 및 역직렬화의 개념 먼저:

1. Java 직렬화 및 역직렬화

Java 직렬화는 Java 객체를 바이트 시퀀스로 변환하는 것을 의미합니다. 프로세스와 Java 역직렬화는 바이트 시퀀스를 복원하는 과정을 의미합니다. Java 객체로.

2. 직렬화와 역직렬화가 필요한 이유

두 프로세스가 원격으로 통신할 때 텍스트, 사진, 오디오, 비디오 등 다양한 유형의 데이터를 서로 보낼 수 있다는 것을 알고 있습니다. ., 이러한 데이터는 바이너리 시퀀스의 형태로 네트워크에서 전송됩니다. 그렇다면 두 개의 Java 프로세스가 통신할 때 프로세스 간 객체 전송이 이루어질 수 있습니까? 대답은 '예'입니다. 어떻게 하나요? 이를 위해서는 Java 직렬화 및 역직렬화가 필요합니다. 즉, 송신자는 Java 객체를 바이트 시퀀스로 변환한 다음 네트워크를 통해 전송해야 하고, 수신자는 바이트 시퀀스에서 Java 객체를 복구해야 합니다.

Java 직렬화와 역직렬화가 필요한 이유를 이해하면 자연스럽게 Java 직렬화의 이점에 대해 생각하게 됩니다. 첫 번째 장점은 직렬화를 통해 데이터를 하드 디스크에 영구적으로 저장할 수 있다는 것입니다(일반적으로 파일에 저장됨). 두 번째 장점은 직렬화를 사용하여 원격 통신, 즉 바이트 수를 달성한다는 것입니다. 개체의 순서가 네트워크를 통해 전송됩니다.

3. 예:

(1) 직렬화 및 역직렬화 파일:

import java.io.*; 
  
@SuppressWarnings("serial") 
class Person implements Serializable { 
  
  public Person(String name, String sex, int age, int height) { 
    this.name = name; 
    this.sex = sex; 
    this.age = age; 
    this.height = height; 
  } 
  
  public String toString() { 
    return "|" + this.name + "|" + this.sex + "|" + this.age + "|"
        + this.height + "|"; 
  } 
  
  public String name; 
  public String sex; 
  public int age; 
  public int height; 
} 
  
public class SerialTest { 
  public static void main(String[] args) throws FileNotFoundException, 
      IOException, ClassNotFoundException { 
  
    Person p = new Person("Jim", "male", 28, 194); 
  
    // 开始序列化 
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( 
        new File("myTest.txt"))); 
    oos.writeObject(p); 
  
    // 反序列化 
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream( 
        new File("myTest.txt"))); 
    Person p1 = (Person) ois.readObject(); 
  
    System.out.println(p1.toString()); 
  } 
}

(2) 클래스로의 XML 역직렬화:

import java.io.*; 
import com.thoughtworks.xstream.XStream; 
import com.thoughtworks.xstream.io.xml.DomDriver; 
  
  
@SuppressWarnings("serial") 
class RoadInfo implements Serializable { 
  
  public int id; 
  public long MDN; 
  public String NAME; 
  public double LNG; 
  public double LAT; 
  public String ICON; 
  
} 
  
@SuppressWarnings("serial") 
class table_list implements Serializable { 
  
  public String toString() { 
    StringBuffer sb = new StringBuffer(); 
    for (RoadInfo r : sequence) { 
      sb.append("|"); 
      sb.append(r.id); 
      sb.append("|"); 
      sb.append(r.MDN); 
      sb.append("|"); 
      sb.append(r.NAME); 
      sb.append("|"); 
      sb.append(r.LNG); 
      sb.append("|"); 
      sb.append(r.LAT); 
      sb.append("|"); 
      sb.append(r.ICON); 
      sb.append("|\n"); 
    } 
    return sb.toString(); 
  } 
  
  public table_list(int count) { 
    sequence = new RoadInfo[count]; 
    for (int i = 0; i < count; i++) { 
      sequence[i] = new RoadInfo(); 
    } 
  } 
  
  public RoadInfo[] sequence; 
} 
  
public class XMLTest { 
  
  /** 
   * @param args 
   */
  public static void main(String[] args) throws Exception { 
    // TODO Auto-generated method stub 
    StringBuffer sb = new StringBuffer(); 
    BufferedReader reader = new BufferedReader(new FileReader(new File( 
        "friend_msg.xml"))); 
    while (true) { 
      String s = reader.readLine();// 读一行 
      if (s == null) { 
        break; 
      } 
      sb.append(s); 
    } 
  
    XStream xs = new XStream(new DomDriver()); 
    table_list db = (table_list) xs.fromXML(sb.toString()); 
    System.out.println(db.toString()); 
  
  } 
}

위는 Java 구현 내용입니다. 직렬화 및 역직렬화의 간단한 예를 보려면 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!


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