2013-02-01 201 views
1

如何在Java中序列化Serializable类的多个对象?如何在java中序列化/反序列化对象列表?

例如

public class Personne implements java.io.Serializable { 

    String nom; 
    String date; 

    Personne(String nom,String date) 
    { 
     this.nom=nom; 
     this.date=date; 
    } 
} 

我想创造出许多OBJETS:

Personne p1 = new Personne("X","XX"); 
Personne p2 = new Personne("Y","ZZ"); 
Personne p3 = new Personne("Z","ZZ"); 

- >静态函数序列化这些对象

- >静态函数来反序列化

完整代码:

package game2; 

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 

/** 
* 
* @author ahmedJ 
*/ 
public class Personne implements java.io.Serializable { 

    String nom; 
    String date; 

    Personne(String nom, String date) { 
     this.nom = nom; 
     this.date = date; 
    } 

    public static void Serialiser(Personne sp) { 

     try { 
      ObjectOutputStream out = new ObjectOutputStream(
        new FileOutputStream("Score.sp")); 
      out.writeObject(sp); 
      out.flush(); 
      out.close(); 
     } catch (java.io.IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void Deserialiser() { 

     Personne a1, a2, a3; 
     try { 
      FileInputStream file = new FileInputStream("Score.sp"); 
      ObjectInputStream in = new ObjectInputStream(file); 
      a1 = (Personne) in.readObject(); 
      a2 = (Personne) in.readObject(); 
      a3 = (Personne) in.readObject(); 

      System.out.println(a1.nom); 
      System.out.println(a2.nom); 
      System.out.println(a3.nom); 

      in.close(); 
      file.close(); 
     } catch (Exception ex) { 
      System.err.println("Erreur de lecture " + ex); 
     } 

    } 

    public static void main(String[] sd) { 
     Personne p1 = new Personne("X", "XX"); 
     Personne p2 = new Personne("Y", "ZZ"); 
     Personne p3 = new Personne("Z", "ZZ"); 

     Serialiser(p1); 
     Serialiser(p2); 
     Serialiser(p3); 

     Deserialiser(); 
    } 
} 

回答

9

使用ObjectOutputStream来写和ObjectInputStream来读取。非常简单,只是工作:

ObjectOutputStream out = new ObjectOutputStream(myFileOutputStream); 
    out.writeObject(p1); 
    out.writeObject(p2); 
    out.writeObject(p3); 
    out.close(); 
    .... 
    ObjectInputStream in = new ObjectInputStream(myFileInputStream); 
    p1 = (Personne) in.readObject(); 
    p2 = (Personne) in.readObject(); 
    p3 = (Personne) in.readObject(); 
+0

我想你给我写它只是保存的最后一个对象,我创建 –

+0

@AHmed显示您的完整代码。 – JustinKSU

+0

我想序列化许多物体 –

2

你可以像这样向Personne添加一个静态方法。

public class Personne implements Serializable{ 
//Other stuff here 
    public static void writePersonne(ObjectOutputStream out,Personne p){ 
     try{ 
      out.writeObject(p); 
      out.flush(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
    public static Personne readPersonne(ObjectInputStream in){ 
     try{ 
      return (Personne)in.readObject(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

你只想遍历数组或某种形式的集合,写每一个和在另一侧阅读。

+0

我想序列化manu objets:p –

+0

谢谢,我已经解决了我的问题 –

+0

我有一个问题如何获取ObjectInputStream中的objets数量? –

相关问题