隨筆-2  評(píng)論-0  文章-0  trackbacks-0
            2006年11月9日

          轉(zhuǎn)自: http://www.j2medev.com/code/j2se/language/200602/1343.html

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

          public?class? CardReader? {
          ?? public?static? void? main ( String []? args )?{
          ???? Card3?card?=? new? Card3 ( 12 ,?Card3.SPADES ) ;
          ???? System.out.println ( "Card?to?write?is:?"? +?card ) ;

          ???? try? {
          ?????? FileOutputStream?out?=? new? FileOutputStream ( "card.out" ) ;
          ?????? ObjectOutputStream?oos?=? new? ObjectOutputStream ( out ) ;
          ?????? oos.writeObject ( card ) ;
          ?????? oos.flush () ;
          ???? }? catch? ( Exception?e )?{
          ?????? System.out.println ( "Problem?serializing:?"? +?e ) ;
          ???? }

          ???? Card3?acard?=? null ;

          ???? try? {
          ?????? FileInputStream?in?=? new? FileInputStream ( "card.out" ) ;
          ?????? ObjectInputStream?ois?=? new? ObjectInputStream ( in ) ;
          ?????? acard?=? ( Card3 )?( ois.readObject ()) ;
          ???? }? catch? ( Exception?e )?{
          ?????? System.out.println ( "Problem?serializing:?"? +?e ) ;
          ???? }

          ???? System.out.println ( "Card?read?is:?"? +?acard ) ;

          ?? }
          }

          class? Card3? implements? Serializable? {
          ?? private? int? suit?=?UNASSIGNED;

          ?? private? int? number?=?UNASSIGNED;

          ?? public?final?static? int? UNASSIGNED?=?- 1 ;

          ?? public?final?static? int? DIAMONDS?=? 1 ;

          ?? public?final?static? int? CLUBS?=? 2 ;

          ?? public?final?static? int? HEARTS?=? 3 ;

          ?? public?final?static? int? SPADES?=? 4 ;

          ?? public?final?static? int? ACE?=? 1 ;

          ?? public?final?static? int? KING?=? 13 ;

          ?? public? Card3 ( int? number,? int? suit )?{
          ???? if? ( isValidNumber ( number ))?{
          ?????? this .number?=?number;
          ???? }? else? {
          ?????? //Error
          ???? }

          ???? if? ( isValidSuit ( suit ))?{
          ?????? this .suit?=?suit;
          ???? }? else? {
          ?????? //Error
          ???? }
          ?? }

          ?? public? int? getSuit ()?{
          ???? return? suit;
          ?? }

          ?? public? int? getNumber ()?{
          ???? return? number;
          ?? }

          ?? public?static? boolean? isValidNumber ( int? number )?{
          ???? if? ( number?>=?ACE?&&?number?<=?KING )?{
          ?????? return?true ;
          ???? }? else? {
          ?????? return?false ;
          ???? }
          ?? }

          ?? public?static? boolean? isValidSuit ( int? suit )?{
          ???? if? ( suit?>=?DIAMONDS?&&?suit?<=?SPADES )?{
          ?????? return?true ;
          ???? }? else? {
          ?????? return?false ;
          ???? }
          ?? }

          ?? public? boolean? equals ( Object?obj )?{
          ???? if? ( obj? instanceof? Card3 )?{
          ?????? Card3?card?=? ( Card3 )? obj;
          ?????? if? ( card.getNumber ()? ==? this .number?&&?card.getSuit ()? ==? this .suit )?{
          ???????? return?true ;
          ?????? }? else? {
          ???????? return?false ;
          ?????? }
          ???? }? else? {
          ?????? return?false ;
          ???? }
          ?? }

          ?? public? int? hashCode ()?{
          ???? return? number?*?suit;
          ?? }

          ?? public? String?toString ()?{
          ???? return? numberToString ( this .number )? +? "?of?"? +?suitToString ( this .suit ) ;
          ?? }

          ?? public?static? String?numberToString ( int? number )?{
          ???? String?result?=? "" ;
          ???? switch? ( number )?{
          ???? case? ACE:
          ?????? result?=? "Ace" ;
          ?????? break ;
          ???? case? 2 :
          ?????? result?=? "Two" ;
          ?????? break ;
          ???? case? 3 :
          ?????? result?=? "Three" ;
          ?????? break ;
          ???? case? 4 :
          ?????? result?=? "Four" ;
          ?????? break ;
          ???? case? 5 :
          ?????? result?=? "Five" ;
          ?????? break ;
          ???? case? 6 :
          ?????? result?=? "Six" ;
          ?????? break ;
          ???? case? 7 :
          ?????? result?=? "Seven" ;
          ?????? break ;
          ???? case? 8 :
          ?????? result?=? "Eight" ;
          ?????? break ;
          ???? case? 9 :
          ?????? result?=? "Nine" ;
          ?????? break ;
          ???? case? 10 :
          ?????? result?=? "Ten" ;
          ?????? break ;
          ???? case? 11 :
          ?????? result?=? "Jack" ;
          ?????? break ;
          ???? case? 12 :
          ?????? result?=? "Queen" ;
          ?????? break ;
          ???? case? KING:
          ?????? result?=? "King" ;
          ?????? break ;
          ???? case? UNASSIGNED:
          ?????? result?=? "Invalid?Number" ;
          ?????? break ;
          ???? }
          ???? return? result;
          ?? }

          ?? public?static? String?suitToString ( int? suit )?{
          ???? String?result?=? "" ;
          ???? switch? ( suit )?{
          ???? case? DIAMONDS:
          ?????? result?=? "Diamonds" ;
          ?????? break ;
          ???? case? CLUBS:
          ?????? result?=? "Clubs" ;
          ?????? break ;
          ???? case? HEARTS:
          ?????? result?=? "Hearts" ;
          ?????? break ;
          ???? case? SPADES:
          ?????? result?=? "Spades" ;
          ?????? break ;
          ???? case? UNASSIGNED:
          ?????? result?=? "Invalid?Suit" ;
          ?????? break ;
          ???? }
          ???? return? result;
          ?? }
          }

          posted @ 2006-11-09 12:22 a3mao 閱讀(402) | 評(píng)論 (0)編輯 收藏

          接口 java.io.Serializable

          public interface Serializable

          實(shí)現(xiàn) java.io.Serializable 接口的類是可序列化的。沒(méi)有實(shí)現(xiàn)此接口的類將不能使它們的任一狀態(tài)被序列化或逆序列化。序列化類的所有子類本身都是可序列化的。這個(gè)序列化接口沒(méi)有任何方法和域,僅用于標(biāo)識(shí)序列化的語(yǔ)意。

          允許非序列化類的子類型序列化,子類型可以假定負(fù)責(zé)保存和恢復(fù)父類型的公有的、保護(hù)的和(如果可訪問(wèn))包的域的狀態(tài)。只要該類(擴(kuò)展)有一個(gè)無(wú)參構(gòu)造子,可初始化它的狀態(tài),那么子類型就可承擔(dān)上述職責(zé)。在這種情況下申明一個(gè)可序列化的類是一個(gè)錯(cuò)誤。此錯(cuò)誤將在運(yùn)行時(shí)被檢測(cè)。

          在逆序列化期間,將使用非序列化類的公用的或保護(hù)的無(wú)參構(gòu)造子對(duì)它的域進(jìn)行初始化。可序列化子類必須能訪問(wèn)父類的無(wú)參構(gòu)造子。它的所有域?qū)南鄳?yīng)流中被恢復(fù)。

          當(dāng)遍歷一個(gè)圖象時(shí),很可能遇到一個(gè)不支持序列化接口的對(duì)象。此時(shí)將拋出 NotSerializableException 異常,且標(biāo)識(shí)該非序列化對(duì)象類。

          在序列化處理過(guò)程中需要特定句柄的類,必須使用如下這些恰當(dāng)?shù)臉?biāo)記實(shí)現(xiàn)特定的方法:

           private void writeObject(java.io.ObjectOutputStream out)
               throws IOException
           private void readObject(java.io.ObjectInputStream in)
               throws IOException, ClassNotFoundException; 
           

          writeObject 方法負(fù)責(zé)寫特定類的對(duì)象的狀態(tài),以至相應(yīng)的 readObject 方法能恢復(fù)它。 通過(guò)調(diào)用 out.defaultWriteObject 可激活保存對(duì)象域的缺省機(jī)制。此方法不必關(guān)心狀態(tài)是屬于它的父類還是子類。 使用 writeObject 方法或基本類型支持的 DataOutput 方法將每個(gè)域的狀態(tài)保存到 ObjectOutputStream 中。

          readObject 方法負(fù)責(zé)從此流中讀取并恢復(fù)類的域。它可能調(diào)用 in.defaultReadObject 方法來(lái)調(diào)用該對(duì)象的非靜態(tài)和非暫時(shí)的域的缺省恢復(fù)機(jī)制。 defaultReadObject 方法使用該流中的信息,用當(dāng)前對(duì)象中的已命名域分配保存在流中該對(duì)象的相應(yīng)域。當(dāng)類已改進(jìn)增加了新域時(shí),這個(gè)接口也做相應(yīng)處理。此方法不必關(guān)心狀態(tài)是屬于它的父類還是子類。 使用 writeObject 方法或基本類型支持的 DataOutput 方法將每個(gè)域的狀態(tài)保存到 ObjectOutputStream 中。

          posted @ 2006-11-09 12:12 a3mao 閱讀(1070) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題  
          主站蜘蛛池模板: 吴忠市| 老河口市| 弥渡县| 岱山县| 正蓝旗| 河津市| 微山县| 江川县| 苏州市| 红安县| 青铜峡市| 贵南县| 建昌县| 阳高县| 长汀县| 乐平市| 汤阴县| 章丘市| 库伦旗| 阿拉善盟| 乌恰县| 琼结县| 宿迁市| 互助| 威信县| 句容市| 宝坻区| 驻马店市| 丰宁| 罗江县| 门源| 新郑市| 金堂县| 奇台县| 辽阳市| 湘阴县| 德格县| 武定县| 甘肃省| 洛川县| 兴义市|