ÓÑÇéÌáʾ£ºÈç¹û±¾ÍøÒ³´ò¿ªÌ«Âý»òÏÔʾ²»ÍêÕû£¬Çë³¢ÊÔÊó±êÓÒ¼ü¡°Ë¢Ð¡±±¾ÍøÒ³£¡
Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ)-µÚ79²¿·Ö
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿! Èç¹û±¾ÊéûÓÐÔĶÁÍ꣬ÏëÏ´μÌÐø½Ó×ÅÔĶÁ£¬¿ÉʹÓÃÉÏ·½ "Êղص½ÎÒµÄä¯ÀÀÆ÷" ¹¦ÄÜ ºÍ "¼ÓÈëÊéÇ©" ¹¦ÄÜ£¡
ÒªÇóAlien¡¡µÄClass¡¡¶ÔÏ󡪡ªJava¡¡ÐéÄâ»ú£¨JVM£©±ãÕÒ²»µ½Alien¡£class¡¡£¨³ý·ÇËüÕýºÃÔÚÀà·¾¶ÄÚ£¬¶ø±¾ÀýÀí¡¡
Ó¦Ïà·´£©¡£ÕâÑù¾Í»áµÃµ½Ò»¸öÃû½Ð¡¡ClassNotFoundException¡¡µÄÎ¥Àý£¨Í¬ÑùµØ£¬Èô·ÇÄܹ»Ð£ÑéAlien¡¡´æÔÚµÄÖ¤¡¡
¾Ý£¬·ñÔòËüµÈÓÚÏûʧ£©¡£¡¡¡¡
»Ö¸´ÁËÒ»¸öÐòÁл¯µÄ¶ÔÏóºó£¬Èç¹ûÏë¶ÔÆä×ö¸ü¶àµÄÊÂÇ飬±ØÐë±£Ö¤JVM¡¡ÄÜÔÚ±¾µØÀà·¾¶»òÕßÒòÌØÍøµÄÆäËûʲ¡¡
ôµØ·½ÕÒµ½Ïà¹ØµÄ¡£classÎļþ¡£¡¡¡¡
10¡£9¡£2¡¡¡¡ÐòÁл¯µÄ¿ØÖÆ¡¡¡¡
ÕýÈç´ó¼Ò¿´µ½µÄÄÇÑù£¬Ä¬ÈϵÄÐòÁл¯»úÖƲ¢²»ÄѲÙ×Ý¡£È»¶ø£¬¼ÙÈôÓÐÌØÊâÒªÇóÓÖ¸ÃÔõô°ìÄØ£¿ÎÒÃÇ¿ÉÄÜÓÐÌØ¡¡
ÊâµÄ°²È«ÎÊÌ⣬²»Ï£Íû¶ÔÏóµÄijһ²¿·ÖÐòÁл¯£»»òÕßijһ¸ö×Ó¶ÔÏóÍêÈ«²»±ØÐòÁл¯£¬ÒòΪ¶ÔÏó»Ö¸´ÒÔºó£¬ÄÇ¡¡
Ò»²¿·ÖÐèÒªÖØд´½¨¡£¡¡¡¡
´Ëʱ£¬Í¨¹ýʵÏÖExternalizable¡¡½Ó¿Ú£¬ÓÃËü´úÌæSerializable¡¡½Ó¿Ú£¬±ã¿É¿ØÖÆÐòÁл¯µÄ¾ßÌå¹ý³Ì¡£Õâ¸ö¡¡
Externalizable¡¡½Ó¿ÚÀ©Õ¹ÁË¡¡Serializable£¬²¢ÔöÌíÁËÁ½¸ö·½·¨£ºwriteExternal£¨£©ºÍreadExternal£¨£©¡£ÔÚÐò¡¡
Áл¯ºÍÖØÐÂ×°ÅäµÄ¹ý³ÌÖУ¬»á×Ô¶¯µ÷ÓÃÕâÁ½¸ö·½·¨£¬ÒÔ±ãÎÒÃÇÖ´ÐÐһЩÌØÊâ²Ù×÷¡£¡¡¡¡
ÏÂÃæÕâ¸öÀý×ÓչʾÁËExternalizable¡¡½Ó¿Ú·½·¨µÄ¼òµ¥Ó¦Óá£×¢ÒâBlip1¡¡ºÍBlip2¡¡¼¸ºõÍêÈ«Ò»Ö£¬³ýÁ˼«Î¢Ð¡¡¡
µÄ²î±ð£¨×Ô¼ºÑо¿Ò»Ï´úÂ룬¿´¿´ÊÇ·ñÄÜ·¢ÏÖ£©£º¡¡¡¡
¡¡¡¡
//£º¡¡Blips¡£java¡¡¡¡
//¡¡Simple¡¡use¡¡of¡¡Externalizable¡¡&¡¡a¡¡pitfall¡¡¡¡
import¡¡java¡£io¡£*£»¡¡¡¡
import¡¡java¡£util¡£*£»¡¡¡¡
¡¡¡¡
class¡¡Blip1¡¡implements¡¡Externalizable¡¡£û¡¡¡¡
¡¡¡¡public¡¡Blip1£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Blip1¡¡Constructor¡¨£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡writeExternal£¨ObjectOutput¡¡out£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡319¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡321¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡throws¡¡IOException¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Blip1¡£writeExternal¡¨£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡readExternal£¨ObjectInput¡¡in£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡throws¡¡IOException£»¡¡ClassNotFoundException¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Blip1¡£readExternal¡¨£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
class¡¡Blip2¡¡implements¡¡Externalizable¡¡£û¡¡¡¡
¡¡¡¡Blip2£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Blip2¡¡Constructor¡¨£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡writeExternal£¨ObjectOutput¡¡out£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡throws¡¡IOException¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Blip2¡£writeExternal¡¨£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡readExternal£¨ObjectInput¡¡in£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡throws¡¡IOException£»¡¡ClassNotFoundException¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Blip2¡£readExternal¡¨£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
public¡¡class¡¡Blips¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String£§£§¡¡args£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Constructing¡¡objects£º¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡Blip1¡¡b1¡¡=¡¡new¡¡Blip1£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡Blip2¡¡b2¡¡=¡¡new¡¡Blip2£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡try¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡ObjectOutputStream¡¡o¡¡=¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡ObjectOutputStream£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡FileOutputStream£¨¡¨Blips¡£out¡¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Saving¡¡objects£º¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡o¡£writeObject£¨b1£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡o¡£writeObject£¨b2£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡o¡£close£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡//¡¡Now¡¡get¡¡them¡¡back£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡ObjectInputStream¡¡in¡¡=¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡ObjectInputStream£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡FileInputStream£¨¡¨Blips¡£out¡¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Recovering¡¡b1£º¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡b1¡¡=¡¡£¨Blip1£©in¡£readObject£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡//¡¡OOPS£¡¡¡Throws¡¡an¡¡exception£º¡¡¡¡
//£¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Recovering¡¡b2£º¡¨£©£»¡¡¡¡
//£¡¡¡¡¡¡¡b2¡¡=¡¡£¨Blip2£©in¡£readObject£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡catch£¨Exception¡¡e£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡e¡£printStackTrace£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡///£º~¡¡¡¡
¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡320¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡322¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¸Ã³ÌÐòÊä³öÈçÏ£º¡¡¡¡
Constructing¡¡objects£º¡¡¡¡
Blip1¡¡Constructor¡¡¡¡
Blip2¡¡Constructor¡¡¡¡
Saving¡¡objects£º¡¡¡¡
Blip1¡£writeExternal¡¡¡¡
Blip2¡£writeExternal¡¡¡¡
Recovering¡¡b1£º¡¡¡¡
Blip1¡¡Constructor¡¡¡¡
Blip1¡£readExternal¡¡¡¡
¡¡¡¡
δ»Ö¸´Blip2¡¡¶ÔÏóµÄÔÒòÊÇÄÇÑù×ö»áµ¼ÖÂÒ»¸öÎ¥Àý¡£ÄãÕÒ³öÁË¡¡Blip1¡¡ºÍ¡¡Blip2¡¡Ö®¼äµÄÇø±ðÂð£¿Blip1¡¡µÄ¹¹½¨¡¡
Æ÷ÊÇ¡°¹«¹²µÄ¡±£¨public£©£¬Blip2¡¡µÄ¹¹½¨Æ÷Ôò²»È»£¬ÕâÑù±ã»áÔÚ»Ö¸´Ê±Ôì³ÉÎ¥Àý¡£ÊÔÊÔ½«¡¡Blip2¡¡µÄ¹¹½¨Æ÷¡¡
ÊôÐÔ±ä³É¡°public¡±£¬È»ºóɾ³ý//£¡×¢Êͱê¼Ç£¬¿´¿´ÊÇ·ñÄܵõ½ÕýÈ·µÄ½á¹û¡£¡¡¡¡
»Ö¸´b1¡¡ºó£¬»áµ÷Óá¡Blip1¡¡Ä¬ÈϹ¹½¨Æ÷¡£ÕâÓë»Ö¸´Ò»¸öSerializable¡¡£¨¿ÉÐòÁл¯£©¶ÔÏó²»Í¬¡£ÔÚºóÕßµÄÇé¿ö¡¡
Ï£¬¶ÔÏóÍêÈ«ÒÔËü±£´æÏÂÀ´µÄ¶þ½øÖÆλΪ»ù´¡»Ö¸´£¬²»´æÔÚ¹¹½¨Æ÷µ÷Ó᣶ø¶ÔÒ»¸öExternalizable¡¡¶ÔÏó£¬Ëù¡¡
ÓÐÆÕͨµÄĬÈϹ¹½¨ÐÐΪ¶¼»á·¢Éú£¨°üÀ¨ÔÚ×ֶζ¨ÒåʱµÄ³õʼ»¯£©£¬¶øÇÒ»áµ÷ÓÃreadExternal£¨£©¡£±ØÐë×¢ÒâÕâ¡¡
Ò»ÊÂʵ¡ª¡ªÌرð×¢ÒâËùÓÐĬÈϵĹ¹½¨ÐÐΪ¶¼»á½øÐСª¡ª·ñÔòºÜÄÑÔÚ×Ô¼ºµÄ¡¡Externalizable¡¡¶ÔÏóÖвúÉúÕýÈ·µÄ¡¡
ÐÐΪ¡£¡¡¡¡
ÏÂÃæÕâ¸öÀý×Ó½ÒʾÁ˱£´æºÍ»Ö¸´Ò»¸öExternalizable¡¡¶ÔÏó±ØÐë×öµÄÈ«²¿ÊÂÇ飺¡¡¡¡
¡¡¡¡
//£º¡¡Blip3¡£java¡¡¡¡
//¡¡Reconstructing¡¡an¡¡externalizable¡¡object¡¡¡¡
import¡¡java¡£io¡£*£»¡¡¡¡
import¡¡java¡£util¡£*£»¡¡¡¡
¡¡¡¡
class¡¡Blip3¡¡implements¡¡Externalizable¡¡£û¡¡¡¡
¡¡¡¡int¡¡i£»¡¡¡¡
¡¡¡¡String¡¡s£»¡¡//¡¡No¡¡initialization¡¡¡¡
¡¡¡¡public¡¡Blip3£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Blip3¡¡Constructor¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡s£»¡¡i¡¡not¡¡initialized¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡Blip3£¨String¡¡x£»¡¡int¡¡a£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Blip3£¨String¡¡x£»¡¡int¡¡a£©¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡s¡¡=¡¡x£»¡¡¡¡
¡¡¡¡¡¡¡¡i¡¡=¡¡a£»¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡s¡¡&¡¡i¡¡initialized¡¡only¡¡in¡¡non¡default¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡constructor¡£¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡String¡¡toString£¨£©¡¡£û¡¡return¡¡s¡¡£«¡¡i£»¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡writeExternal£¨ObjectOutput¡¡out£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡throws¡¡IOException¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Blip3¡£writeExternal¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡You¡¡must¡¡do¡¡this£º¡¡¡¡
¡¡¡¡¡¡¡¡out¡£writeObject£¨s£©£»¡¡out¡£writeInt£¨i£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡readExternal£¨ObjectInput¡¡in£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡throws¡¡IOException£»¡¡ClassNotFoundException¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Blip3¡£readExternal¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡You¡¡must¡¡do¡¡this£º¡¡¡¡
¡¡¡¡¡¡¡¡s¡¡=¡¡£¨String£©in¡£readObject£¨£©£»¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡321¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡323¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡i¡¡=in¡£readInt£¨£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String£§£§¡¡args£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Constructing¡¡objects£º¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡Blip3¡¡b3¡¡=¡¡new¡¡Blip3£¨¡¨A¡¡String¡¡¡¨£»¡¡47£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨b3¡£toString£¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡try¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡ObjectOutputStream¡¡o¡¡=¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡ObjectOutputStream£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡FileOutputStream£¨¡¨Blip3¡£out¡¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Saving¡¡object£º¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡o¡£writeObject£¨b3£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡o¡£close£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡//¡¡Now¡¡get¡¡it¡¡back£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡ObjectInputStream¡¡in¡¡=¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡ObjectInputStream£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡FileInputStream£¨¡¨Blip3¡£out¡¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Recovering¡¡b3£º¡¨£©¡¡£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡b3¡¡=¡¡£¨Blip3£©in¡£readObject£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨b3¡£toString£¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡catch£¨Exception¡¡e£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡e¡£printStackTrace£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡///£º~¡¡¡¡
¡¡¡¡
ÆäÖУ¬×ֶΡ¡sºÍ¡¡i¡¡Ö»ÔÚµÚ¶þ¸ö¹¹½¨Æ÷Öгõʼ»¯£¬²»¹ØĬÈϹ¹½¨Æ÷µÄÊ¡£ÕâÒâζ׿ÙÈç²»ÔÚreadExternal¡¡Öгõ¡¡
ʼ»¯¡¡s¡¡ºÍ¡¡i£¬ËüÃǾͻá³ÉΪnull¡¡£¨ÒòΪÔÚ¶ÔÏó´´½¨µÄµÚÒ»²½ÖÐÒѽ«¶ÔÏóµÄ´æ´¢¿Õ¼äÇå³ýΪ1£©¡£Èô×¢Ê͵ô¸ú¡¡
ËæÓÚ¡°You¡¡must¡¡do¡¡this¡±ºóÃæµÄÁ½ÐдúÂ룬²¢ÔËÐгÌÐò£¬¾Í»á·¢ÏÖµ±¶ÔÏó»Ö¸´ÒÔºó£¬s¡¡ÊÇnull£¬¶øi¡¡ÊÇ¡¡
Áã¡£¡¡¡¡
Èô´ÓÒ»¸öExternalizable¡¡¶ÔÏó¼Ì³Ð£¬Í¨³£ÐèÒªµ÷ÓÃwriteExternal£¨£©ºÍ¡¡readExternal£¨£©µÄ»ù´¡Àà°æ±¾£¬ÒԱ㡡
ÕýÈ·µØ±£´æºÍ»Ö¸´»ù´¡Àà×é¼þ¡£¡¡¡¡
ËùÒÔΪÁËÈÃÒ»ÇÐÕý³£ÔË×÷ÆðÀ´£¬Ç§Íò²»¿É½öÔÚ¡¡writeExternal£¨£©·½·¨Ö´ÐÐÆÚ¼äдÈë¶ÔÏóµÄÖØÒªÊý¾Ý£¨Ã»ÓÐĬ¡¡
ÈϵÄÐÐΪ¿ÉÓÃÀ´ÎªÒ»¸ö¡¡Externalizable¡¡¶ÔÏóдÈëËùÓгÉÔ±¶ÔÏ󣩵ģ¬¶øÊDZØÐëÔÚ¡¡readExternal£¨£©·½·¨ÖÐÒ²¡¡
»Ö¸´ÄÇЩÊý¾Ý¡£³õ´Î²Ù×÷ʱ¿ÉÄÜ»áÓÐЩ²»Ï°¹ß£¬ÒòΪExternalizable¡¡¶ÔÏóµÄĬÈϹ¹½¨ÐÐΪʹÆä¿´ÆðÀ´ËƺõÕý¡¡
ÔÚ½øÐÐijÖÖ´æ´¢Óë»Ö¸´²Ù×÷¡£µ«ÊµÇé²¢·ÇÈç´Ë¡£¡¡¡¡
¡¡¡¡
1¡£¡¡transient¡¡£¨ÁÙʱ£©¹Ø¼ü×Ö¡¡¡¡
¿ØÖÆÐòÁл¯¹ý³Ìʱ£¬¿ÉÄÜÓÐÒ»¸öÌض¨µÄ×Ó¶ÔÏó²»Ô¸ÈÃJava¡¡µÄÐòÁл¯»úÖÆ×Ô¶¯±£´æÓë»Ö¸´¡£Ò»°ãµØ£¬ÈôÄǸö×Ó¡¡
¶ÔÏó°üº¬Á˲»ÏëÐòÁл¯µÄÃô¸ÐÐÅÏ¢£¨ÈçÃÜÂ룩£¬¾Í»áÃæÁÙÕâÖÖÇé¿ö¡£¼´Ê¹ÄÇÖÖÐÅÏ¢ÔÚ¶ÔÏóÖоßÓС°private¡±¡¡
¡¡£¨Ë½ÓУ©ÊôÐÔ£¬µ«Ò»µ©¾ÐòÁл¯´¦Àí£¬ÈËÃǾͿÉÒÔͨ¹ý¶ÁÈ¡Ò»¸öÎļþ£¬»òÕßÀ¹½ØÍøÂç´«ÊäµÃµ½Ëü¡£¡¡¡¡
Ϊ·ÀÖ¹¶ÔÏóµÄÃô¸Ð²¿·Ö±»ÐòÁл¯£¬Ò»¸ö°ì·¨Êǽ«×Ô¼ºµÄÀàʵÏÖΪExternalizable£¬¾ÍÏóÇ°ÃæչʾµÄÄÇÑù¡£Õâ¡¡
ÑùÒ»À´£¬Ã»ÓÐÈκζ«Î÷¿ÉÒÔ×Ô¶¯ÐòÁл¯£¬Ö»ÄÜÔÚwriteExternal£¨£©Ã÷È·ÐòÁл¯ÄÇЩÐèÒªµÄ²¿·Ö¡£¡¡¡¡
È»¶ø£¬Èô²Ù×÷µÄÊÇÒ»¸ö¡¡Serializable¡¡¶ÔÏó£¬ËùÓÐÐòÁл¯²Ù×÷¶¼»á×Ô¶¯½øÐС£Îª½â¾öÕâ¸öÎÊÌ⣬¿ÉÒÔÓá¡
transient¡¡£¨ÁÙʱ£©Öð¸ö×ֶεعرÕÐòÁл¯£¬ËüµÄÒâ˼ÊÇ¡°²»ÒªÂé·³Ä㣨ָ×Ô¶¯»úÖÆ£©±£´æ»ò»Ö¸´ËüÁË¡ª¡ªÎÒ¡¡
»á×Ô¼º´¦ÀíµÄ¡±¡£¡¡¡¡
ÀýÈ磬¼ÙÉèÒ»¸öLogin¡¡¶ÔÏó°üº¬ÁËÓëÒ»¸öÌض¨µÄµÇ¼»á»°ÓйصÄÐÅÏ¢¡£Ð£ÑéµÇ¼µÄºÏ·¨ÐÔʱ£¬Ò»°ã¶¼Ï뽫Êý¡¡
¾Ý±£´æÏÂÀ´£¬µ«²»°üÀ¨ÃÜÂ롣Ϊ×öµ½ÕâÒ»µã£¬×î¼òµ¥µÄ°ì·¨ÊÇʵÏÖSerializable£¬²¢½«¡¡password¡¡×Ö¶ÎÉèΪ¡¡
transient¡£ÏÂÃæÊǾßÌåµÄ´úÂ룺¡¡¡¡
¡¡¡¡
//£º¡¡Logon¡£java¡¡¡¡
//¡¡Demonstrates¡¡the¡¡¡¨transient¡¨¡¡keyword¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡322¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡324¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
import¡¡java¡£io¡£*£»¡¡¡¡
import¡¡java¡£util¡£*£»¡¡¡¡
¡¡¡¡
class¡¡Logon¡¡implements¡¡Serializable¡¡£û¡¡¡¡
¡¡¡¡private¡¡Date¡¡date¡¡=¡¡new¡¡Date£¨£©£»¡¡¡¡
¡¡¡¡private¡¡String¡¡username£»¡¡¡¡
¡¡¡¡private¡¡transient¡¡String¡¡password£»¡¡¡¡
¡¡¡¡Logon£¨String¡¡name£»¡¡String¡¡pwd£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡username¡¡=¡¡name£»¡¡¡¡
¡¡¡¡¡¡¡¡password¡¡=¡¡pwd£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡String¡¡toString£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡String¡¡pwd¡¡=¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡£¨password¡¡==¡¡null£©¡¡£¿¡¡¡¨£¨n/a£©¡¨¡¡£º¡¡password£»¡¡¡¡
¡¡¡¡¡¡¡¡return¡¡¡¨logon¡¡info£º¡¡n¡¡¡¡¡¡¡¨¡¡£«¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨username£º¡¡¡¨¡¡£«¡¡username¡¡£«¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨n¡¡¡¡¡¡date£º¡¡¡¨¡¡£«¡¡date¡£toString£¨£©¡¡£«¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨n¡¡¡¡¡¡password£º¡¡¡¨¡¡£«¡¡pwd£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String£§£§¡¡args£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡Logon¡¡a¡¡=¡¡new¡¡Logon£¨¡¨Hulk¡¨£»¡¡¡¨myLittlePony¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¡¡¨logon¡¡a¡¡=¡¡¡¨¡¡£«¡¡a£©£»¡¡¡¡
¡¡¡¡¡¡¡¡try¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡ObjectOutputStream¡¡o¡¡=¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡ObjectOutputStream£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡FileOutputStream£¨¡¨Logon¡£out¡¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡o¡£writeObject£¨a£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡o¡£close£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡//¡¡Delay¡¡£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡int¡¡seconds¡¡=¡¡5£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡long¡¡t¡¡=¡¡System¡£currentTimeMillis£¨£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£«¡¡seconds¡¡*¡¡1000£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡while£¨System¡£currentTimeMillis£¨£©¡¡¡¶¡¡t£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡//¡¡Now¡¡get¡¡them¡¡back£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡ObjectInputStream¡¡in¡¡=¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡ObjectInputStream£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡FileInputStream£¨¡¨Logon¡£out¡¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨Recovering¡¡object¡¡at¡¡¡¨¡¡£«¡¡new¡¡Date£¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡a¡¡=¡¡£¨Logon£©in¡£readObject£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¡¡¨logon¡¡a¡¡=¡¡¡¨¡¡£«¡¡a£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡catch£¨Exception¡¡e£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡e¡£printStackTrace£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡///£º~¡¡¡¡
¡¡¡¡
¿ÉÒÔ¿´µ½£¬ÆäÖеÄdate¡¡ºÍ¡¡username¡¡×ֶα£³ÖÔʼ״̬£¨Î´Éè³Étransient£©£¬ËùÒÔ»á×Ô¶¯ÐòÁл¯¡£È»¶ø£¬¡¡
password¡¡±»ÉèΪ¡¡transient£¬ËùÒÔ²»»á×Ô¶¯±£´æµ½´ÅÅÌ£»ÁíÍ⣬×Ô¶¯ÐòÁл¯»úÖÆÒ²²»»á×÷»Ö¸´ËüµÄ³¢ÊÔ¡£Êä¡¡
³öÈçÏ£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡323¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡325¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡
logon¡¡a¡¡=¡¡logon¡¡info£º¡¡¡¡
¡¡¡¡¡¡username£º¡¡Hulk¡¡¡¡
¡¡¡¡¡¡date£º¡¡Sun¡¡Mar¡¡23¡¡18£º25£º53¡¡PST¡¡1997¡¡¡¡
¡¡¡¡¡¡password£º¡¡myLittlePony¡¡¡¡
Recovering¡¡object¡¡at¡¡Sun¡¡Mar¡¡23¡¡18£º25¡¡£º59¡¡PST¡¡1997¡¡¡¡
logon¡¡a¡¡=¡¡logon¡¡info£º¡¡¡¡
¡¡¡¡¡¡username£º¡¡Hulk¡¡¡¡
¡¡¡¡¡¡date£º¡¡Sun¡¡Mar¡¡23¡¡18£º25£º53¡¡PST¡¡1997¡¡¡¡
¡¡¡¡¡¡password£º¡¡£¨n/a£©¡¡¡¡
¡¡¡¡
Ò»µ©¶ÔÏó»Ö¸´³ÉÔÀ´µÄÑù×Ó£¬password¡¡×ֶξͻá±ä³Énull¡¡¡£×¢Òâ±ØÐëÓÃtoString£¨£©¼ì²épassword¡¡ÊÇ·ñΪ¡¡
null£¬ÒòΪÈôÓùýÔصġ°£«¡±ÔËËã·ûÀ´×°ÅäÒ»¸öString¡¡¶ÔÏ󣬶øÇÒÄǸöÔËËã·ûÓöµ½Ò»¸önull¡¡¾ä±ú£¬¾Í»áÔì³É¡¡
Ò»¸öÃûΪNullPointerException¡¡µÄÎ¥Àý£¨Ð°æJava¡¡¿ÉÄÜ»áÌṩ±ÜÃâÕâ¸öÎÊÌâµÄ´úÂ룩¡£¡¡¡¡
ÎÒÃÇÒ²·¢ÏÖ¡¡date¡¡×ֶα»±£´æµ½´ÅÅÌ£¬²¢´Ó´ÅÅָ̻´£¬Ã»ÓÐÖØÐÂÉú³É¡£¡¡¡¡
ÓÉÓÚExternalizable¡¡¶ÔÏóĬÈÏʱ²»±£´æËüµÄÈκÎ×ֶΣ¬ËùÒÔtransient¡¡¹Ø¼ü×ÖÖ»ÄÜ°éËæSerializable¡¡Ê¹¡¡
Óᣡ¡¡¡
¡¡¡¡
2¡£¡¡Externalizable¡¡µÄÌæ´ú·½·¨¡¡¡¡
Èô²»ÊÇÌرðÔÚÒâҪʵÏÖ¡¡Externalizable¡¡½Ó¿Ú£¬»¹ÓÐÁíÒ»ÖÖ·½·¨¿É¹©Ñ¡Óá£ÎÒÃÇ¿ÉÒÔʵÏÖ¡¡Serializable¡¡½Ó¡¡
¿Ú£¬²¢Ìí¼Ó£¨×¢ÒâÊÇ¡°Ìí¼Ó¡±£¬¶ø·Ç¡°¸²¸Ç¡±»òÕß¡°ÊµÏÖ¡±£©ÃûΪwriteObject£¨£©ºÍ¡¡readObject£¨£©µÄ·½·¨¡£¡¡
Ò»µ©¶ÔÏó±»ÐòÁл¯»òÕßÖØÐÂ×°Å䣬¾Í»á·Ö±ðµ÷ÓÃÄÇÁ½¸ö·½·¨¡£Ò²¾
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿!
ÎÂÜ°Ìáʾ£º ο´Ð¡ËµµÄͬʱ·¢±íÆÀÂÛ£¬Ëµ³ö×Ô¼ºµÄ¿´·¨ºÍÆäËüС»ï°éÃÇ·ÖÏíÒ²²»´íŶ£¡·¢±íÊéÆÀ»¹¿ÉÒÔ»ñµÃ»ý·ÖºÍ¾Ñé½±Àø£¬ÈÏÕæдԴ´ÊéÆÀ ±»²ÉÄÉΪ¾«ÆÀ¿ÉÒÔ»ñµÃ´óÁ¿½ð±Ò¡¢»ý·ÖºÍ¾Ñé½±ÀøŶ£¡