Java가 정렬화와 반정렬화를 실현하는 간단한 예

1. Java 정렬화 및 반정렬화
자바 서열화는 자바 대상을 바이트 서열로 바꾸는 과정을 말한다.반면 자바 반서열화는 바이트 시퀀스를 자바 대상으로 복구하는 과정을 말한다.
2. 왜 서열화와 반서열화가 필요한가
우리는 두 프로세스가 원격 통신을 할 때 텍스트, 사진, 오디오, 영상 등을 포함한 각종 유형의 데이터를 서로 전송할 수 있다는 것을 알고 있으며, 이러한 데이터는 모두 2진 서열의 형식으로 네트워크에서 전송된다.그러면 두 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이 class로 역정렬됨

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("|
"); } 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()); } }

좋은 웹페이지 즐겨찾기