1. Java 직렬화 및 사막화
Java 직렬화는 Java 객체를 바이트 시퀀스로 변환하는 과정을 말합니다. Java Desorialization은 바이트 시퀀스를 Java 객체로 복원하는 과정을 말합니다.
2. 직렬화 및 사제화가 필요한 이유
두 프로세스가 원격으로 통신하면 텍스트, 그림, 오디오, 비디오 등을 포함하여 다양한 유형의 데이터를 서로 보낼 수 있으며 이러한 데이터는 이진 시퀀스 형태로 네트워크에서 전송됩니다. 따라서 두 개의 Java 프로세스가 통신하면 프로세스간에 객체 전송을 실현할 수 있습니까? 대답은 예입니다. 어떻게해야합니까? 이를 위해서는 Java 직렬화 및 사막화가 필요합니다. 다시 말해, 한편으로, 발신자는이 Java 객체를 일련의 바이트로 변환 한 다음 네트워크에서 전송해야합니다. 반면에, 수신기는 바이트 시퀀스에서 Java 객체를 복원해야합니다.
Java 직렬화 및 사제화가 필요한 이유를 이해하면 자연스럽게 Java 직렬화의 이점에 대해 생각합니다. 이점은 먼저 데이터 지속성이 실현된다는 것입니다. 직렬화를 통해 데이터는 하드 디스크에 영구적으로 저장 될 수 있습니다 (일반적으로 파일에 저장). 둘째, 직렬화는 원격 통신, 즉 네트워크에서 바이트 시퀀스를 전송하는 데 사용됩니다.
3. 예 :
(1) 파일 직렬화 및 사형화 :
java.io.*; @SuppressWarnings ( "Serial") 클래스 사람은 시리얼이즈 가능한 {public person (문자열 이름, 문자열 섹스, int 연령, int 높이) {this.name = name; this.sex = 섹스; this.age = age; this.height = 높이; } public String toString () {return "|" + this.name + "|" + this.sex + "|" + this.age + "|" + this.height + "|"; } 공개 문자열 이름; 공개 문자열 섹스; 공개 int 연령; 공개 int 높이; } public class serialtest {public static void main (String [] args)은 filenotfoundException, ioException, classNotFoundException {person p = new Person ( "Jim", "Male", 28, 194); // ObjectOutputStream 직렬화 시작 OOS = 새 ObjectOutputStream (새 FileOutputStream (새 파일 ( "myTest.txt"))); oos.writeobject (p); // deserialize objectInputStream ois = new ObjectInputStream (new FileInputStream (새 파일 ( "myTest.txt")); Person P1 = (Person) OIS.ReadObject (); System.out.println (p1.toString ()); }}
(2) 클래스로의 XML 사막화 :
java.io.*; import com.thoughtworks.xstream.xstream; import com.thoughtworks.xstream.io.xml.domdriver; @SuppressWarnings ( "Serial") Class RoadInfo Serializable {public int id; 공개 긴 MDN; 공개 문자열 이름; 공개 이중 LNG; 공개 이중 위도; 공개 문자열 아이콘; } @SuppressWarnings ( "Serial") Class Table_List는 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 [] 시퀀스; } public class xmltest { / ** * @param args * / public static void main (string [] args)은 예외를 던졌습니다. bufferedReader reader = new bufferedReader (new FilEReader (새 파일 ( "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 ()); }}