对象序列化到文本并读取

先将代码贴上来先,然后对自己讲解一下

import java.io.FileReader;

import java.io.FileWriter;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.IOException;

import java.io.EOFException ;

import java.io.Serializable;

 

public class Test2

{

    public static void main(String[] args)

    {

       testSerializaObject ();

       testReadSerializaObject ();

    }

   

    public static void testReadSerializaObject()

    {

       System. out .println( " 读取了信息: " );

       ObjectInputStream ois = null ;

       FileInputStream fis = null ;

       SeriObject s = null ;

       try

       {

           fis = new FileInputStream( "C:/Object.txt" );

           ois = new ObjectInputStream(fis);

           boolean hasNext = true ;

           while (hasNext)

           {

              try

              {

                  s =  (SeriObject)ois.readObject(); 

                  if (s != null )

                     System. out .println( "SeriObject---" + s.toString());

              }

              catch (Exception ex)

              {

                  hasNext = false ;

              }

           }

       }

       catch (IOException ex)

       {

           ex.printStackTrace();

       }

       finally

       {

           if (ois != null )

           {

              try {ois.close();} catch (IOException e){e.getMessage();};

           }

           if (fis != null )

           {

              try {fis.close();} catch (IOException e){e.getMessage();};

           }

       }

    }

   

    public static void testSerializaObject()

    {

       System. out .println( " Object.txt 文件写入 Object..." );

       SeriObject s1 = new SeriObject();

       s1.setAge(20);

       s1.setName( "UserName1" );

       s1.setSex( "Girl" );

       SeriObject s2 = new SeriObject();

       s2.setAge(30);

       s2.setName( "UserName2" );

      

       ObjectOutputStream oos = null ;    

       FileOutputStream fos = null ;

      

       try

       {

           fos = new FileOutputStream( "C:/Object.txt" , true );

           oos = new ObjectOutputStream(fos);

           oos.writeObject(s1);

           oos.writeObject(s2);

           System. out .println( "Object Write Successfully !" );

       }

       catch (IOException ex)

       {

           ex.getMessage();

       }

       finally

       {

          

           if (oos != null )

           {

              try {oos.close();} catch (IOException e){e.getMessage();};

           }

           if (fos != null )

           {

              try {fos.close();} catch (IOException e){e.getMessage();};

           }

       }

    }

}

 

class SeriObject implements Serializable

{

    private int age ;

    private String name ;

    private transient String sex ;

    public int getAge()

    {

       return age ;

    }

    public void setAge( int age)

    {

       this . age = age;

    }

    public String getName()

    {

       return name ;

    }

    public void setName(String name)

    {

       this . name = name;

    }

    public String getSex()

    {

       return sex ;

    }

    public void setSex(String sex)

    {

       this . sex = sex;

    }

    public String toString()

    {

       return "Name:" + this . name + ";Sex:" + this . sex + ";Age:" + this . age + ";" ;

    }

}

 

结果如下:

读取了信息:

SeriObject---Name:UserName1;Sex:null;Age:20;

SeriObject---Name:UserName2;Sex:null;Age:30;

 

---------------------------------------------------------------------------------------------------

 

 

序列化对象就比较好说啦,只要实现 Serializable 这个接口的类都可以序列化(事实是不是这样没去考究过),这个 SeriObject 就实现了,其中的 private transient String sex ; 这个表示,我不需要进行序列化传输,也就是说,这个 SeriObject 对象序列化保存在文本文件后, sex 这个属性将不会被保存。(看结果 Sex 始终为 null

在这里就序列化了两个对象存进文本,但中间不能再写入其它非 OBJECT 的东西,否则,读取会出错。

序列化后的文本读取对象,在这里使用了一个变量( hasNext )用来判断是否还有对象没有读出来,当 ObjectInputStream readObject 遇到错误( EOFException )的时候就将 hasNext 设为 false ,网上有朋友是这样说的,我也没有找到更好的资料,所以就这样挨着读下去,有错就当作是读取完了。

这样基本上就可以完成多个 OBJECT 的序列化到文本和读取了。

 

当然当多个对象序列化到文本保存的时候呢,有朋友说还可以使用 LIST 把它给装起来,然后将 LIST 扔进 文本里去,

但我不知 LIST 是否实现了 Serializable ,所以我想就算实现了也会用一个类来实现 Serializable ,在这个类里面

加入 LIST ,用来装其它对象。

 

有点疑问:如果一个文本里序列化了多个不同的对象,读取的时候怎么来呢?难不志一个一个的读并还原回去?

 

序列化用处很多,比如说保存当前游戏内容,下次再玩。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值