锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
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;
聽聽
}
}
瀹炵幇 java.io.Serializable 鎺ュ彛鐨勭被鏄彲搴忓垪鍖栫殑銆傛病鏈夊疄鐜版鎺ュ彛鐨勭被灝嗕笉鑳戒嬌瀹冧滑鐨勪換涓鐘舵佽搴忓垪鍖栨垨閫嗗簭鍒楀寲銆傚簭鍒楀寲綾葷殑鎵鏈夊瓙綾繪湰韜兘鏄彲搴忓垪鍖栫殑銆傝繖涓簭鍒楀寲鎺ュ彛娌℃湁浠諱綍鏂規(guī)硶鍜屽煙錛屼粎鐢ㄤ簬鏍囪瘑搴忓垪鍖栫殑璇剰銆?
鍏佽闈炲簭鍒楀寲綾葷殑瀛愮被鍨嬪簭鍒楀寲錛屽瓙綾誨瀷鍙互鍋囧畾璐熻矗淇濆瓨鍜屾仮澶嶇埗綾誨瀷鐨勫叕鏈夌殑銆佷繚鎶ょ殑鍜?濡傛灉鍙闂?鍖呯殑鍩熺殑鐘舵併傚彧瑕佽綾?鎵╁睍)鏈変竴涓棤鍙傛瀯閫犲瓙錛屽彲鍒濆鍖栧畠鐨勭姸鎬侊紝閭d箞瀛愮被鍨嬪氨鍙壙鎷呬笂榪拌亴璐c傚湪榪欑鎯呭喌涓嬬敵鏄庝竴涓彲搴忓垪鍖栫殑綾繪槸涓涓敊璇傛閿欒灝嗗湪榪愯鏃惰媯(gè)嫻嬨?
鍦ㄩ嗗簭鍒楀寲鏈熼棿錛屽皢浣跨敤闈炲簭鍒楀寲綾葷殑鍏敤鐨勬垨淇濇姢鐨勬棤鍙傛瀯閫犲瓙瀵瑰畠鐨勫煙榪涜鍒濆鍖栥傚彲搴忓垪鍖栧瓙綾誨繀欏昏兘璁塊棶鐖剁被鐨勬棤鍙傛瀯閫犲瓙銆傚畠鐨勬墍鏈夊煙灝嗕粠鐩稿簲嫻佷腑琚仮澶嶃?
褰撻亶鍘嗕竴涓浘璞℃椂錛屽緢鍙兘閬囧埌涓涓笉鏀寔搴忓垪鍖栨帴鍙g殑瀵硅薄銆傛鏃跺皢鎶涘嚭 NotSerializableException 寮傚父錛屼笖鏍囪瘑璇ラ潪搴忓垪鍖栧璞$被銆?
鍦ㄥ簭鍒楀寲澶勭悊榪囩▼涓渶瑕佺壒瀹氬彞鏌勭殑綾伙紝蹇呴』浣跨敤濡備笅榪欎簺鎭板綋鐨勬爣璁板疄鐜扮壒瀹氱殑鏂規(guī)硶錛?
private void writeObject(java.io.ObjectOutputStream out) throws IOException private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException;
writeObject 鏂規(guī)硶璐熻矗鍐欑壒瀹氱被鐨勫璞$殑鐘舵侊紝浠ヨ嚦鐩稿簲鐨?readObject 鏂規(guī)硶鑳芥仮澶嶅畠銆?閫氳繃璋冪敤 out.defaultWriteObject 鍙縺媧諱繚瀛樺璞″煙鐨勭己鐪佹満鍒躲傛鏂規(guī)硶涓嶅繀鍏沖績(jī)鐘舵佹槸灞炰簬瀹冪殑鐖剁被榪樻槸瀛愮被銆?浣跨敤 writeObject 鏂規(guī)硶鎴栧熀鏈被鍨嬫敮鎸佺殑 DataOutput 鏂規(guī)硶灝嗘瘡涓煙鐨勭姸鎬佷繚瀛樺埌 ObjectOutputStream 涓?
readObject 鏂規(guī)硶璐熻矗浠庢嫻佷腑璇誨彇騫舵仮澶嶇被鐨勫煙銆傚畠鍙兘璋冪敤 in.defaultReadObject 鏂規(guī)硶鏉ヨ皟鐢ㄨ瀵硅薄鐨勯潪闈?rùn)鎬佸拰闈炴殏鏃剁殑鍩熺殑緙虹渷鎭㈠鏈哄埗銆?defaultReadObject 鏂規(guī)硶浣跨敤璇ユ祦涓殑淇℃伅錛岀敤褰撳墠瀵硅薄涓殑宸插懡鍚嶅煙鍒嗛厤淇濆瓨鍦ㄦ祦涓瀵硅薄鐨勭浉搴斿煙銆傚綋綾誨凡鏀硅繘澧炲姞浜?jiǎn)鏂板煙鏃跺Q岃繖涓帴鍙d篃鍋氱浉搴斿鐞嗐傛鏂規(guī)硶涓嶅繀鍏沖績(jī)鐘舵佹槸灞炰簬瀹冪殑鐖剁被榪樻槸瀛愮被銆?浣跨敤 writeObject 鏂規(guī)硶鎴栧熀鏈被鍨嬫敮鎸佺殑 DataOutput 鏂規(guī)硶灝嗘瘡涓煙鐨勭姸鎬佷繚瀛樺埌 ObjectOutputStream 涓?/p>