Java でのシリアル化と逆シリアル化の簡単な例

黄舟
リリース: 2017-01-20 11:13:35
オリジナル
1341 人が閲覧しました

シリアル化と逆シリアル化は、Java オブジェクトとバイト シーケンスの相互変換を指します。これらは一般に、Java でのシリアル化と逆シリアル化の 2 つの簡単な例を示します。シーケンスと逆シリアル化:

1. Java のシリアル化と逆シリアル化

Java のシリアル化とは、Java オブジェクトをバイト シーケンスに変換するプロセスを指し、Java 逆シリアル化とは、バイト シーケンスを Java オブジェクトに復元するプロセスを指します。

2. シリアル化と逆シリアル化が必要な理由

2 つのプロセスがリモートで通信するとき、テキスト、画像、オーディオ、ビデオなどのさまざまな種類のデータを相互に送信できることがわかっています。バイナリ シーケンスはネットワーク経由で送信されます。では、2 つの Java プロセスが通信するとき、プロセス間のオブジェクトの転送は実現できるのでしょうか?答えは「はい」です。どうやってするの?これには、Java のシリアル化と逆シリアル化が必要です。つまり、送信者は Java オブジェクトをバイト シーケンスに変換してネットワーク経由で送信する必要があり、他方、受信者はバイト シーケンスから Java オブジェクトを復元する必要があります。

なぜ Java のシリアル化と逆シリアル化が必要なのかを理解したら、当然 Java シリアル化の利点について考えます。 1 つ目の利点は、シリアル化によってデータを永続的にハードディスクに保存できることです (通常はファイルに保存されます)。2 つ目は、リモート通信、つまり送信にシリアル化が使用されることです。ネットワーク上のオブジェクトのバイト。

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 中国語 Web サイト (www.php.cn) にご注意ください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート