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
對象序列化到文本並讀取
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.