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 ,用来装其它对象。
有点疑问:如果一个文本里序列化了多个不同的对象,读取的时候怎么来呢?难不志一个一个的读并还原回去?
序列化用处很多,比如说保存当前游戏内容.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liushengmz/archive/2010/05/24/5620669.aspx
对象序列化到文本并读取
最新推荐文章于 2021-03-02 06:17:45 发布