More Java PitfallsÖÐÎİæ

Michael C. Daconta

Öø

 
Kevin T. Smith

Donald Avondolio

W. Clay Richardson

 

Ðì  ²¨    Òë

ÕÔ  ¿Æ  ÉóУ

 

 

 

 

 

 

 

 

ÈËÃñÓʵç³ö°æÉç


 

 

 

±¾ÊéÏ׸øEdsger W. Dijkstra£¬ÕâÊǶÔËûÓÀÔ¶µÄÃ廳¡£ËûÔø¾­Ëµ¹ý£º

¡°ÎÒµÄÒâ˼ÊÇ£¬Èç¹û10ÄêÒԺ󣬵±Äã͵͵µØ×öһЩËäÈ»¿ìËÙµ«²»¹»ÑϽ÷µÄÊÂÇéʱ£¬ÄãͻȻ¿´µ½Îҷ·ðÔÚÄãµÄÉíºó×¢ÊÓ×ÅÄ㣬ÁîÄãÞÑÐÄ×ÔÔð¡®Dijkstra²»»áϲ»¶ÎÒÕâÑù¸É¡¯¡£Èç¹ûÄܹ»ÕâÑù£¬ÎÒÒ²ËãÊÇûÓÐÐé¶È½ñÉúÁË¡£¡±

ÎÒÃDZØÐëÇ«¹§µØ±íʾ²»Í¬Ò⣺DijkstraµÄÓ°ÏìºÎÖ¹10Ä꣬¼´Ê¹1010ÄêÒÔºó£¬ËûÔÚÌìÌÃÀïÒ²ÄÜÐÀοµØ¿´µ½ËûµÄÓ°ÏìÒÀÈ»´æÔÚÈ˼䡣Ïà¶ÔÓÚËûÔÚ˼ÏëÉÏ´ïµ½µÄ¸ß¶È£¬Õâ¸öÆÀ¼Û¾ø·Ç¹ý·Ö¡£

 

ÄÚ ÈÝ Ìá Òª

±¾Êéͨ¹ý·ÖÎöºÍ̽¾¿Java±à³ÌÖеÄÎÊÌ⣬×ܽá³ö¸ßЧµÄ½â¾ö·½°¸£¬°ïÖúJava³ÌÐòÔ±¿Ë·þʵ¼Ê±à³Ì¹¤×÷Öеġ°ÏÝÚ塱¡£

È«Êé·ÖΪ3¸ö²¿·Ö£¬50¸öItems¡£µÚÒ»²¿·Ö¡°¿Í»§²ã¡±£¨22¸öItems£©º­¸ÇÁËJ2MEºÍJ2SE£¬ÌÖÂÛÁËÔÚ¿ª·¢ÍøÂçºÍ¶ÀÁ¢¿Í»§Ó¦ÓóÌÐòʱ¿ÉÄÜÓöµ½µÄÏÝÚå¡£µÚ¶þ²¿·Ö¡°Web²ã¡±£¨14¸öItems£©Ì½ÌÖÁËÔËÐÐÓÚWebÈÝÆ÷ÄÚ²¿µÄ×é¼þµÄÏÝÚå¡£µÚÈý²¿·Ö¡°ÆóÒµ²ã¡±£¨14¸öItems£©Éæ¼°µ½J2EEƽ̨µÄÒ»²¿·Ö×é¼þ£¬»òÊÇÔÚÆóÒµJava Bean£¨EJB£©ÈÝÆ÷ÄÚ²¿µÄÖ´ÐС£

±¾ÊéÊʺÏÓÐÒ»¶¨¾­ÑéµÄJava³ÌÐòÔ±ÔĶÁ£¬Ò²¿É×÷Ϊ¹¤×÷Öнâ¾öʵ¼ÊÎÊÌâµÄ²Î¿¼Êé¡£

 

ǰ    ÑÔ

 

¡°ÓÐʱºò£¬ÎÒÃǻᷢÏÖһЩÁîÈ˲»¿ìµÄÕæÏࡣÿµ±´Ëʱ£¬ÎÒÃDZãÏÝÓÚÁ½Äѵľ³µØ£º´Ó¿ÆÑ§µÄ½Ç¶È½²£¬ÒþÂ÷ËüÃÇÊDz»³ÏʵµÄ±íÏÖ£¬Òò´ËÎÒÃDZØÐ빫²¼ËüÃÇ¡£µ«ÊÇ£¬Ò»µ©¹«²¼ÁËËüÃÇ£¬ÎÒÃǵÈÓÚÊdz¯×Ô¼ºÁ³ÉÏ´òÁËÒ»°ÍÕÆ¡£¡±

Edsger W. Dijkstra, ¡°ÎÒÃÇÈçºÎ¹«²¼¿ÉÄÜÔì³ÉÉ˺¦µÄÕæÏࣿ¡±

 

 

±à³ÌÒª´ïµ½ÓÅÐãµÄ¾³½çÊǼ«ÎªÀ§Äѵġ£¶ÔÓÚ³ÌÐòÔ±ÐÂÊÖ¶øÑÔ£¬ËûÃÇÐèÒª¾«Í¨µÄÈí¼þ¹¤³Ì֪ʶÌåϵ£¨www.swebok.org£©µÄ¹æÄ£²»¶ÏÀ©Õ¹£¬ÄÚÈݲ»¶Ï±ä»¯£¬ËûÃǵÄǰÐÐ֮·ÏԵøñÍâ¼èÐÁ¡£±¾ÊéµÄ×÷Õß·¢¾õ£¬²»ÂÛÊǶԳÌÐòÔ±µÄ¹¤×÷ЧÂÊ»¹ÊǶÔÈí¼þµÄ¿É¿¿ÐÔ¶øÑÔ£¬·á¸»µÄ¾­ÑéºÍÉîÈëµÄÀí½âÊÇÁ½¸ö¹Ø¼üµÄÒòËØ¡£ÖÁÉÙ£¬¾­Ñé·á¸»µÄ³ÌÐòÔ±²»»áÔÚºÚ°µÖаíõÓ¡£ËûÃÇÊìÖªÄÇÀïµÄµØÐΣ¬ËûÃÇÖªµÀÄÇÀïµÄ¸ßµÍÆð·ü£¬Òò¶ø¿ÉÒԱܿªÄÇЩΣÏÕÇøÓò¡£±¾ÊéÏò¶ÁÕßչʾÁËÎÒÃǵľ­Ñ飬¶Ô50¸ö·ÖÁ¢µÄ»°ÌâÌṩÁËÖ¸µ¼Òâ¼û£¬°ïÖúÄã±Ü¿ªÄÇЩΣÏյشø¡£

ʲôÊÇÏÝÚå

ÔÚJava Pitfalls£¨Wiley£¬2000£©[1]Ò»ÊéÖУ¬ÎÒÃÇÊ״θø³öÁËÏÝÚ壨pitfall£©µÄÕýʽ¶¨Ò壺

¡°ÏÝÚ壬ÊÇÖ¸ÄÇЩÄܹ»Õý³£±àÒ룬µ«ÔÚÖ´ÐÐʱȴ²úÉúÊÂÓëԸΥµÄ£¬ÓÐʱÉõÖÁÊÇÔÖÄÑÐÔºó¹ûµÄ³ÌÐò´úÂë¡£¡±

Õâ¸öÏà¶Ô¼ò½àµÄ¶¨Ò帲¸ÇÁ˱»ÎÒÃÇÈÏΪÊÇ¡°»ù±¾¡±µÄÏÝÚå¡£¶ÔÓÚÏÝÚåµÄ¶¨Ò廹ÓÐÐí¶àÖÖ˵·¨¡£Ò»¸ö¸üΪ¹ã·ºµÄ¶¨ÒåÊÇ£ºÈκοÉÄܵ¼Ö³ÌÐòÔ±°Ñ´óÁ¿µÄʱ¼äÀË·ÑÔÚ¿ª·¢¹¤¾ßµÄʹÓÃÉ϶ø²»ÊÇ×îÖÕÈí¼þµÄ½øÕ¹ÉϵÄÓïÑÔÌØÐÔ¡¢API»òϵͳ£¬¶¼¿ÉÒÔ³ÆÎªÏÝÚå¡£

²úÉúÏÝÚåµÄÔ­Òò´óÖ¿ÉÒÔ·Ö³ÉÁ½ÖÖÀàÐÍ£ºÆ½Ì¨Éè¼ÆÕßµÄʧÎóºÍ¾­ÑéÇ··áµÄ³ÌÐòÔ±µÄ¹ýʧ¡£ÕâÑù·ÖÀ಻ÊÇΪÁË×·¾¿ÔðÈΣ¬¶øÊÇ´Ó¹¹½¨ÏÝÚå·ÖÀàѧµÄ½Ç¶ÈÀ´È·¶¨ÏÝÚåµÄ¸ùÔ´¡£ÎÒÃÇÔÚͼ1.1ÖÐչʾÁËÏÝÚåµÄ·ÖÀ࣬ĿµÄ¾ÍÊǸüºÃµØÀí½âÕâЩÈÃÎÒÃÇÏÝÈëÀ§¾³µÄ¶«Î÷¡£

ͼ1.1  ÏÝÚå·ÖÀàѧ

ºÍϵͳÉè¼ÆÕßÏà¹ØµÄÏÝÚåÀàÐÍÓÐÏÂÃæ¼¸ÖÖ£º

²»Ö±¹ÛµÄÓ¦ÓóÌÐò±à³Ì½Ó¿Ú£¨API£©¡£Javaƽ̨¾ßÓÐÊýǧ¸öÀàºÍÊýÍò¸ö·½·¨¡£½öÕâ¸öƽ̨µÄ¹æÄ£¾ÍÒѾ­ÊÇÒ»¸ö¸´ÔÓµÄÏÝÚå¡£ÓÐЩÀàÉè¼ÆµÃ·Ç³£³öÉ«£¬ÈçServlet¡¢IOÁ÷£¨ÅųýЧÂÊÒòËØ£©ºÍCollection£¨¼¯ºÏ£©¡£Òź¶µÄÊÇ£¬Ðí¶àAPIÉè¼ÆµÃºÜ²»Ö±¹Û£¬ÆäÔ­ÒòÈçÏ£º

l     ´íÎóµÄ³éÏó²ã¡£Ðí¶àAPIÊǹ¹ÖþÓÚÆäËûÈí¼þ£¨Èç²Ù×÷ϵͳ»ò±¾µØ´úÂ룩µÄ²ãÃæÖ®Éϵģ¬Ä¿µÄÊÇΪÁ˶Թ¦ÄܽøÐмò»¯»ò¾ÛºÏ¡£ÔÚÉè¼ÆAPIʱ£¬Éè¼ÆÈËÔ±±ØÐëÔÚ¼òµ¥ÐԺͿØÖÆÁ£¶ÈÖ®¼ä½øÐÐȨºâ¡£Òò´Ë£¬ÔÚÉèÖóéÏó²ãʱ£¬Éè¼ÆÈËÔ±±ØÐë¸ù¾Ý¾ßÌåµÄ»·¾³ºÍÄ¿±êÓû§Öƶ¨Êʵ±µÄ²»Ê§Æ½ºâµÄ·½°¸¡£Èç¹û³éÏó²ã´ÎÌ«¸ß£¨ÈçURLConnection, Item17£©£¬Óû§¿ÉÄÜ»áÒòΪ¶Ô¸÷ÖÖÓ³Éä¹ØÏµµÄ¿ØÖÆÄÜÁ¦Ì«Èõ¶ø¸Ðµ½Ê§Íû¡£Èç¹û³éÏó²ã´ÎÌ«µÍ£¬Óû§¿ÉÄÜ»áÔÚÄÇЩ×î³£¼ûµÄ²Ù×÷ÖÐÀË·ÑÌ«¶àµÄʱ¼ä£¬´Ó¶øµ¼ÖÂЧÂʵÍÏ¡£

l     ½¹µã·ÖÀëµÄ²»×ã¡£µ±Ò»¸öAPIÊÔͼʵÏÖÌ«¶àµÄ¹¦ÄÜʱ£¬Ëü³£³£»á»ìÔÓÐí¶àÒþ»ÞµÄº¬Ò壬´Ó¶øÒÔÒ»ÖÖ²»ÀíÏëµÄ·ç¸ñ´¦ÀíËüµÄ¶à¸ö½¹µã¡£Õâ·½ÃæµÄÒ»¸öÀý×ÓÊÇJAXR API£¬ËüÊÔͼ½«²»Í¬µÄÐÅϢģÐÍUDDIºÍebXML×éºÏÔÚÒ»Æð£¨Item47£©¡£

l     ÆäËûȱÏÝ¡£Ì«¶àµÄ·½·¨µ÷ÓÃÐòÁкÍÒÀÀµ¹ØÏµÓпÉÄܵ¼Ö²»ÕýÈ·µÄ²Ù×÷˳Ðò¡£µÍÁÓµÄÃüÃûºÍÈõÀàÐͲÎÊý£¨object¶ø²»ÊÇijÖÖ¾ßÌåµÄÀàÐÍ£©ÓпÉÄܽ«³ÌÐòÔ±±ÆÉϾøÂ·¡£

ÓïÑԵĸ´ÔÓÐÔ¡£ºÍËüµÄǰ±²ÓïÑÔÏà±È£¬JavaÓïÑÔÓÐÁËÐí¶à¸Ä½ø£¬µ«ËüÈÔÈ»ÉîÏÝÓÚ¸÷ÖÖÕÛÖÔºÍÌØÐÔµÄäöÎÐÖ®ÖС£Ëü×î¸É¾»µÄÓïÑÔÌØÐÔÊÇËüÑϸñµÄÃæÏò¶ÔÏóÐÔ¡¢×Ô¶¯ÄÚ´æ¹ÜÀíºÍ½Ó¿Ú¡£µ«ËüµÄÓÐЩÓïÑÔÌØÐÔ£¨ÈçÏ̺߳Íͬ²½¡¢»ù±¾ÀàÐͺͶÔÏóÖ®¼äµÄ¶ÔÁ¢ÒÔ¼°Òì³£µÄÓÐЧʹÓõȣ©¹ýÓÚ¸´ÔÓÁË¡£

ƽ̨ÁìÓòµÄʵÏÖ·½Ê½Ç·¼Ñ¡£Õâ·½Ãæ×î³£±»ÈËÃÇËùÌá¼°µÄ¾ÍÊÇЧÂÊÎÊÌâ¡£Õâ·½ÃæµÄÒ»¸öµäÐÍÀý×ÓÊÇ£ºÓÉÓÚЧÂʵÄÔ­Òò£¬ÓïÑÔÉè¼ÆÕßÔÚNIO³ÌÐò°üÖÐÖØÐ±àдÁËÊäÈë/Êä³ö¹¤¾ß¡£³ýÁËЧÂÊÖ®Í⣬»¹ÓÐһЩAPIÆÆ»µÁËJavaÓïÑÔ¡°Ò»´Î±àд¡¢µ½´¦ÔËÐУ¨WORA£©¡±µÄ±£Ö¤£¬ÈçFile.renameTo()·½·¨£¨Item 20£©ºÍRuntime.exec()·½·¨£¨Item 1£©¡£»¹ÓÐһЩAPI²¢²»ÍêÕû£¬µ«³ÌÐòԱȴÒÔΪËüÌṩÁËÍêÕûµÄ¹¦ÄÜ¡£ÕâЩÎÊÌâÊÇ¿ÉÒÔÐÞÕýµÄ£¬ËüÃÇͨ³£ÔÚJava Development Kit£¨JDK£©µÄа汾Öнâ¾ö¡£

ºÍ³ÌÐòÔ±ÓйصÄÏÝÚåÀàÐÍÓÐÏÂÃæ¼¸ÖÖ£º

֪ʶµÄØÑ·¦¡£¾­Ñé¿ÉÒÔÌáÉý³ÌÐòÔ±µÄ֪ʶÉî¶È¡£Ñ§Ï°Ò»¸öϵͳµÄµ×²ã¸ÅÄî¡¢Ï໥×÷ÓÃÒÔ¼°Ï¸Î¢Ö®´¦ÐèҪʱ¼ä¡£Õâ³£³£±íÏÖÔÚµ±´æÔÚÒ»¸ö¸üºÃµÄÌæ´ú·½°¸Ê±£¬Æ«Æ«Ñ¡ÔñÁËÒ»¸ö²»ÀíÏëµÄʵÏÖ·½°¸£¨ÈçAppletºÍWeb Start£¬Item 26£©¡¢¶ÔÒ»¸öAPIÄÚ²¿¹¤×÷¹ý³ÌµÄÀí½âÓÐÎó£¨ÈçServletʵÀý±äÁ¿µÄ½á¹û£¬Item 31£©ÒÔ¼°µ±ÊµÏÖ·½°¸ÎÞ·¨´ïµ½ÄãÔ¤ÆÚµÄÐÐΪʱ¸Ðµ½Õ𾪣¨ÔÚͼ1.1ÖÐÓÃ×迹²»Æ¥ÅäÀ´±íʾ£©¡£ÕâÖÖ×迹²»Æ¥Åä¿ÉÄÜ·¢ÉúÔÚ¶àÖØ²¢·¢½á¹û¼¯ÖУ¨Item 41£©¡£

Æ«¼û¡£Èç¹ûûÓжàÄêµÄ¾­Ñ飬³ÌÐòÔ±¿ÉÄÜ»á¹ýÓÚÒÐÖØÒÔǰµÄ¾­Ñ飬Õâ¿ÉÄܵ¼ÖÂËûÆ«ÏòÓÚij¸öÌØ¶¨µÄ·½Ïò¡£Õâ·½ÃæµÄÀý×ÓÊDz»ÀûÓÃÄÇЩÄܹ»ÓÃÓÚ×Ô¶¯¿ª·¢¹ý³ÌµÄ¹¤¾ßÈçAnt£¨Item 11£©ºÍJUnit£¨Item 12£©¡£ÁíÍâÒ»¸öÀý×ÓÊǼá³ÖʹÓÃÔ­ÏȵÄAPI£¬¶ÔÓÃÓÚ¼¯ºÏ£¨Item 21£©ºÍÕýÔò±í´ïʽ£¨Item 30£©µÄÐÂAPIÊÓ¶ø²»¼û¡£×îºó£¬»¹ÓÐÒ»ÖÖÆ«¼û¾ÍÊǰÑÔ­ÏȵÄϰ¹ß´øµ½Ò»¸öеıà³Ì»·¾³ÖУ¬ÈçJ2ME±à³Ì£¨Item 22£©¡£

ÎÞЧµÄ¼ÙÉè¡£³ÌÐòÔ±¿ÉÄÜ»á¸ù¾ÝÎÞЧµÄ¼ÙÉè×÷³ö²»ÕýÈ·µÄ¾ö¶¨£¬ÀýÈ磬Ëû¿ÉÄÜ»áÒÔΪ×îÖ±½ÓµÄ½â¾ö·½°¸¾ÍÊÇ×îºÃµÄ½â¾ö·½°¸¡£ÕâÖÖÇé¿ö³£³£ÔÚʹÓÃJSP£¨Item24£©ºÍJ2EE£¨Item22£©Éè¼Æ´óÐÍϵͳʱ³öÏÖ¡£

ÏÝÚå¿ÉÄÜ»áÁî³ÌÐòÔ±²úÉúÇ¿ÁҵĴìÕ۸С£ÎÒÃÇÊ×ÏȾ­ÀúÁËÕâЩ´ìÕÛ¡£ÎÒÃǵÄÄ¿±ê¾ÍÊǰïÖú¶ÁÕß±ÜÃâһЩÎÒÃÇÔø¾­Í´¿à²»¿°µÄÔâÓö¡£¼ÈÈ»ÎÒÃÇÏÖÔÚÒѾ­ÖªµÀÁËʲôÊÇÏÝÚ壬½ÓÏÂÀ´Çë¿´Ò»ÏÂÎÒÃÇ·ÖÎöÏÝÚåµÄ·½·¨¡£

·ÖÎöÏÝÚå

ÿ¸öItemÓÉ3¸ö²»Í¬µÄ²¿·Ö×é³É£º

Ö¢×´»òÎÊÌâ¡£ÏÔʾÏÝÚåËùÔì³ÉµÄºó¹û¡£ÎÒÃÇÓÃÒ»¸öÃû½Ð¡°BadXXX.java¡±µÄ³ÌÐòÀ´ËµÃ÷Õâ¸öÎÊÌ⣬ÆäÖС°XXX¡±±íʾÎÊÌâËù´æÔÚµÄÏÝÚåÀàÐÍ¡£

ÎÊÌâµÄ¸ùÔ´¡£ÕâÊǽÒʾÏÝÚå×îÖØÒªµÄÒ»¸ö²¿·Ö¡£ÔÚ´Ë£¬ÎÒÃÇÉîÈëµ×²ã£¬½âÊÍÁË¿ÉÄܵ¼Ö³ÌÐòÔ±°íõÓµÄÏêϸÄÚ²¿¹¤×÷¹ý³Ì¡¢ÎÞЧµÄ¼ÙÉè»òÕßAPIȱÏÝ¡£Í¨³£ÕâÖÖ½âÊͽ«Ê¹ÓÃÒ»ÕÅͼÀ´Ç¿»¯¶ÁÕßµÄÈÏʶ¡£

½â¾ö·½°¸£¨solution£©»ò½â¾ö°ì·¨£¨workaround£©¡£×îºóÒ»²¿·ÖÊÇչʾÎÊÌâµÄ½â¾ö·½·¨¡£ÕâÊÇÓÃÒ»¸öÃû½Ð¡°GoodXXX.java¡±³ÌÐòʵÏֵģ¬ËüÊÇ¡°BadXXX.java¡±µÄ¶ÔÓ¦³ÌÐò¡£Õâ¸öÎÊÌâ½â¾ö³ÌÐòͨ³£»¹½«¸ø³öÔËÐнá¹û£¬»òÕßÊÇÒ»ÕÅ±í£¬»òÕßÊÇÒ»ÕÅͼ£¬Ö¤Ã÷ÎÊÌâȷʵÒѾ­½â¾ö¡£

ÕâÖÖ·ÖÎöÏÝÚåµÄ·½·¨±»Ö¤Ã÷ÊÇÒ»ÖÖÓÐЧµÄ·½·¨£¬ËüºÜºÃµØÕ¹Ê¾ÁËÕâЩ±à³Ì°µ½¸µÄËùÔÚ¡£

±¾ÊéÓëJava PitfallsÓкβ»Í¬

±¾Êé¼Ì³ÐÁËJava PitfallsµÄÐí¶àÓÅÐãÌØÐÔ£¬²¢ÔÚÈý¸ö·½Ãæ×÷Á˸Ľø£º

¸ü¹ãµÄ¸²¸Ç¡£Java Pitfalls°Ñ×¢ÒâÁ¦¼¯ÖÐÓÚlang¡¢util¡¢ioºÍGUI ³ÌÐò°üÖУ¬±¾ÊéÔò¸²¸ÇÁËJ2ME¡¢J2SEºÍJ2EEƽ̨¡£

еÄÌØÐÔ¡£±¾Ê麭¸ÇÁ˴󲿷ÖÐÂÌØÐÔ£¬ÈçÕýÔò±í´ïʽ¡¢NIO¡¢¶ÏÑÔ¡¢JAXR¡¢JAXM¡¢JAX-RPCµÈÐí¶àÐÂÌØÐÔ¡£

¸ü¼ÑµÄ¸²¸Ç¡£×÷Õ߸üΪ׼ȷºÍÍêÕûµØ×ñÑ­ÁË¡°·ÖÎöÏÝÚ塱µÄÄ£ÐÍ£¬¶ÔÏÝÚåµÄÃèÊö¸üΪÖÜÈ«¡¢·ÖÎö¸üΪÏ꾡¡£

×ÜÖ®£¬×÷ÕßŬÁ¦Ê¹±¾ÊéÔÚ¸÷¸ö·½Ãæ¶¼³¬Ô½Java Pitfalls¡£ÎÒÃÇÕæ³ÏµØÏ£ÍûÎÒÃÇÄܹ»ÊµÏÖÎÒÃǵÄÄ¿±ê£¬²¢¹ÄÀø¹ã´ó¶ÁÕߵİÑÒâ¼û·´À¡¸øÎÒÃÇ¡£

±¾ÊéµÄ×éÖ¯ÐÎʽ

ºÍJava PitfallsÒ»Ñù£¬±¾ÊéÒ²ÓÐ50¸öItem¡£µ«ºÍJava Pitfalls²»Í¬£¬±¾ÊéÖ»»®·ÖΪÈý¸ö²¿·Ö£¬·Ö±ð¶ÔÓ¦ÓÚÈý²ãÌåϵ½á¹¹¡£

µÚÒ»²¿·Ö£º¿Í»§²ã£¨The Client Tier£©¡£Õⲿ·Öº­¸ÇÁËJ2MEºÍJ2SE£¬Ì½Ë÷ÁËÔÚ¿ª·¢ÍøÂçºÍ¶ÀÁ¢¿Í»§Ó¦ÓóÌÐòʱ¿ÉÄÜÓöµ½µÄÏÝÚå¡£Õⲿ·ÖÌÖÂ۵ϰÌâ°üÀ¨Æ«ºÃ£¨Preference£©¡¢Ó¦ÓóÌÐò²¿Êð¡¢ÈÕÖ¾¡¢IOЧÂʵȡ£Õⲿ·Ö¹²°üÀ¨22¸öÏÝÚå¡£

µÚ¶þ²¿·Ö£ºWeb²ã£¨The Web Tier£©¡£Õⲿ·ÖÑо¿ÔËÐÐÓÚWebÈÝÆ÷ÄÚ²¿µÄ×é¼þµÄÏÝÚ壬ÈçServletºÍJSPÒ³Ãæ¡£ÕâЩӦÓóÌÐò²úÉú¶¯Ì¬WebÒ³Ãæ»òÕßÓëApplet¡¢JNLP»ò¶ÀÁ¢µÄ¿Í»§½øÐн»»¥¡£Õⲿ·Öº­¸ÇµÄ»°ÌâÓÐJSPÉè¼Æ¡¢»º´æ¼¼Êõ£¨Caching£©¡¢Servlet¹ýÂËÆ÷£¨Servlet Filter£©¡¢Êý¾Ý¿âÁ¬½Ó£¨Database Connection£©¡¢±íµ¥ÑéÖ¤£¨Form Validation£©µÈ¡£Õⲿ·Ö¹²°üÀ¨14¸öÏÝÚå¡£

µÚÈý²¿·Ö£ºÆóÒµ²ã£¨The Enterprise Tier£©¡£Õⲿ·ÖÎÒÃÇËù¹Û²ìµÄ×é¼þÊÇJ2EEƽ̨µÄÒ»²¿·Ö£¬»òÕßÊÇÔÚÆóÒµJava Bean£¨EJB£©ÈÝÆ÷µÄÄÚ²¿Ö´ÐУ¬Èç»á»°Bean¡¢ÊµÌåBeanºÍÏûÏ¢Çý¶¯Bean¡£ÕâЩ×é¼þÓëÆäËûÆóҵϵͳ£¨Enterprise System£©¡¢ÒÅÁôϵͳ£¨Legacy System£©ºÍWeb²ã½øÐн»»¥£¬»òÕßÖ±½ÓÓë¿Í»§½øÐн»»¥¡£ÓÉÓÚWeb·þÎñÔÚÆóÒµ²ãÖаçÑÝÁ˹ؼü½ÇÉ«£¬ËùÒÔÓÐЩÓëWeb ·þÎñAPI£¨JAXRºÍJAX-RPC£©Ïà¹ØµÄÏÝÚåÒ²ÔÚÕâÒ»²¿·Ö½øÐÐÃèÊö¡£Õⲿ·ÖµÄÆäËû»°ÌâÓÐJ2EEÉè¼Æ´íÎ󡢻ỰBean¡¢JavaÊý¾Ý¶ÔÏó£¨JDO£¬Java Data Object£©¡¢°²È«£¨Security£©¡¢ÊÂÎñ£¨Transaction£©µÈ¡£Õⲿ·Ö¹²°üÀ¨14¸öÏÝÚå¡£

ÈçºÎʹÓñ¾Êé

Äã¿ÉÒÔ°´ÕÕÈýÖÖ·½Ê½Ê¹Óñ¾Ê飺×÷ÎªÄ³Ð©ÌØ¶¨ÎÊÌâµÄ²Î¿¼Êֲᡢ×÷ΪÎÊÌâËùÌáʾµÄ»°ÌâµÄ½Ì²Ä¡¢×÷ΪÄãËùÔÚ×éÖ¯µÄ¼¼ÊõÖ¸µ¼³ÌÐòµÄ×ÅÊֵ㡣ÈÃÎÒÃÇ·Ö±ðÏêϸÌÖÂÛ¡£

×÷Ϊ²Î¿¼ÊֲᡣÄã¿ÉÒÔ¸ù¾ÝĿ¼£¬Ñо¿ÄãËùÃæÁÙµÄÎÊÌâµÄ¾ßÌå½â¾ö·½°¸¡£¾ø´ó¶àÊý¶ÁÕß°´ÕÕÕâÖÖ·½Ê½Ê¹Óñ¾Êé¡£ÓÐЩ¶ÁÕß·´À¡ËûÃǰѵÚ1±¾Ê飨Java Pitfalls£©×÷Ϊ¼¼ÊõͼÊé¹ÝµÄ¹«¹²×ÊԴʹÓá£

×÷Ϊ½Ì²Ä¡£Äã´ÓÍ·µ½Î²ÔĶÁ±¾Ê飬ѧϰÿ¸öÏÝÚåµÄ¸ùÔ´¡£ÓÃÕâÖÖ·½Ê½ÔĶÁ±¾ÊéµÄÁíÒ»ÖÖ·½·¨ÊÇä¯ÀÀĿ¼»òÕýÎÄ£¬È»ºóÔĶÁÄã¸ÐÐËȤµÄÏÝÚå¡£×îºó£¬Äã¿ÉÒÔÔÚһЩ·ÇÕýʽµÄÄÚ²¿Á·±ø»î¶¯»ò¼¼Êõ½»Á÷»áÒéÉϰÑÿ¸öÏÝÚå×÷ΪСÐͽ̲ÄʹÓá£

×÷Ϊָµ¼³ÌÐòµÄÒ»²¿·Ö¡£Äã¿ÉÒ԰ѱ¾Êé×÷ΪÄãËùÔÚ×éÖ¯µÄ¼¼ÊõÖ¸µ¼³ÌÐòµÄÆðµã¡£±¾ÊéÊÇÔÚÆ½µÈÖ¸µ¼µÄÔ­ÔòϱàдµÄ¡£¡°Ö¸µ¼Õß¡±µÄ´Êµä¶¨ÒåÊÇ¡°´ÏÃ÷ÇÒÖµµÃÐÅÀµµÄ¹ËÎÊ¡±¡£Õâ³£³£Ê¹ÈËÃÇÎóÒÔΪָµ¼Õß±ØÐëÄêÁä¸ü³¤¡¢¾­Ñé¸ü·á¸»¡£ÎÒ·´¶ÔÕâ¸ö¶¨Ò壬ÒòΪ·ûºÏÕâ¸ö¶¨ÒåµÄÓÅÐãÖ¸µ¼ÕßÌ«ÉÙÁË¡£´Ó±¾ÖÊÉÏ˵£¬Ö¸µ¼ÊÇ̽Ë÷ÕæÀíµÄij¸ö·½Ãæ¡£Òò´Ë£¬³ÉΪһÃûÖ¸µ¼ÕߵĹؼüËØÖÊÊÇÄã±ØÐëÔÚÒ»¸öÁìÓòÓÐÉîÈëµÄÀí½â£¬²¢ÇÒÔ¸ÒâÈñðÈ˹²ÏíÄãµÄ֪ʶ¡£ÈκÎÈ˶¼¿ÉÒÔ²ÎÓëÕâ¸ö¹ý³Ì£¬ÎÒ¹ÄÀøÄã¼ÓÈ뵽ƽµÈÖ¸µ¼µÄÐÐÁÐÖС£´ó¼ÒÒ»Æð¹¤×÷£¬ÎÒÏàÐÅÎÒÃÇÄܹ»½â¾öÈí¼þÖÊÁ¿µÄΣ»ú¡£

±¾ÊéµÄÅäÌ×ÍøÕ¾ÓÐÄÄЩÄÚÈÝ

±¾ÊéµÄÅäÌ×ÍøÕ¾£¨http://www.wiley.com/legacy/compbooks/daconta/ mjp/£©°üº¬4¸ö¹Ø¼üÄÚÈÝ£º

l     Ô´´úÂë¡£±¾ÊéËùÓгÌÐòÇåµ¥µÄÔ´´úÂëÒÔѹËõÎĵµµÄÐÎʽÌṩ¡£

l     ¿±Îó±í¡£¶ÁÕß»ò×÷Õß·¢ÏÖµÄÈκδíÎó½«ÁÐÈëµ½¶ÔÓ¦µÄÐÞÕýÎı¾ÖС£

l     ÑùÕ¡£ÉÐδ¹ºÂò±¾Ê飬µ«¶ÔËüµÄ·ç¸ñºÍÄÚÈݸÐÐËȤµÄÈËÃÇ¿ÉÒÔË÷È¡±¾ÊéµÄÑùÕ¡¢Ä¿Â¼±íºÍË÷Òý¡£

l     ÁªÏµµØÖ·¡£×÷ÕßµÄÓʼþµØÖ·ÒÔ¼°Ò»Ð©FAQµÄ´ð°¸¡£

»¶Ó­ÆÀÂÛ

±¾ÊéÊÇÓɳÌÐòԱΪ³ÌÐòÔ±¶ø±àд£¨Programmer for Programmer£©µÄ¡£ÎÒÃÇ»¶Ó­Õû¸ö¼ÆËã»úÉçÇøµÄËùÓÐÆÀÂÛ¡¢½¨ÒéºÍÎÊÌâ¡£¶ÁÕߵķ´À¡Ê¹ÎÒÃǵÄд×÷¸üÓмÛÖµ£¬¶øÇÒÓÐÖúÓÚÌá¸ßÎÒÃǵŤ×÷ÖÊÁ¿¡£ÎÒ¸ÐлËùÓл¨Ê±¼äÓëÎÒÃǽӴ¥£¬±¨¸æ´íÎó¡¢Ìá³ö½¨ÉèÐÔÒâ¼û»ò±í´ïÔÞÉ͵ÄÈËÃÇ¡£

ÎÒµÄÓʼþµØÖ·ÊÇ£ºmike@daconta.net¡£ÄãÒ²¿ÉÒÔͨ¹ýÏÂÃæµÄͨÐŵØÖ·ÓëÎÒÁªÏµ£º

Michael C. Daconta

C/o Robert Elliott

Wiley Publishing, Inc.

111 River Street

Hoboken, NJ 07030

ÖÂÕæ³ÏµÄ×£¸££¡

Michael Daconta

Ò»ÑÇÀûÉ£ÄÇÖÝSierra Vista

×¢Ò⣺

¶Ô´úÂëµÄ˵Ã÷£ºÔÚÐí¶à´úÂëÇåµ¥ÖУ¬Äã¿ÉÒÔ·¢ÏÖijЩÐеÄ×îÓÒ¶ËÓÐÒ»¸ö·ûºÅ£¬±íʾһÐеĿռäÎÞ·¨Ð´ÏÂÕû¸ö´úÂëÐеÄËùÓÐ×Ö·û£¬´Ë´¦±íʾתÐУ¬ÏÂÒ»ÐеÄÄÚÈÝÊôÓÚÉÏÒ»ÐеÄÁ¬Ðø¡£

 

Ä¿    ¼

µÚÒ»²¿·Ö  ¿Í»§²ã... 1

Item 1£ºµ±Runtime.exec()ÔËÐгö´íʱ... 4

Item 2£ºNIOµÄЧÂʺÍÏÝÚå... 16

Item 3£ºÎÒÄþÔ¸²»Ê¹ÓÃÊôÐÔ... 31

Item 4£ºµ±ÐÅÏ¢Òþ²ØµÃÌ«¶àʱ... 35

Item 5£º±ÜÃâjava.util.loggingÖеÄÁ£¶ÈÏÝÚå... 41

Item 6£ºµ±±ê×¼APIµÄʵÏÖ·¢Éú³åͻʱ... 49

Item 7£º¶ÏÑÔ¾ø·Ç¶àÓà... 55

Item 8£º²éÕÒDOMµÄ´íÎó·½·¨... 61

Item 9£º±£´æÒ»¸öDOMµÄÀ§¾³... 68

Item 10£ºÊó±ê°´Å¥µÄ¿ÉÒÆÖ²ÐÔ... 74

Item 11£ºApache AntºÍÉúÃüÖÜÆÚ¹ÜÀí... 81

Item 12£ºJUnit£ºµ¥Ôª²âÊÔʹÊÂÇé±äµÃ¼òµ¥... 92

Item 13£ºÖ´ÐеÄʧ°Ü... 100

Item 14£ºÄãÊÕ¼¯ÁËʲô... 104

Item 15£º±ÜÃâSingletonÏÝÚå... 108

Item 16£ºµ±setSize()²»ÄÜÈçԸʱ... 113

Item 17£ºµ±POSTµ½Ò»¸öURLÎÞ·¨ÈçԸʱ... 117

Item 18£ºÓÐЧµÄ×Ö·û´®±ê¼Ç»¯... 130

Item 19£ºJLayered PaneÏÝÚå... 135

Item 20£ºFile.renameToΪʲôʧ°Ü... 139

Item 21£ºÊ¹Óõü´úÌæ´úö¾Ù... 145

Item 22£ºJ2MEµÄЧÂʺÍÏÝÚå... 150

µÚ¶þ²¿·Ö  Web²ã... 185

Item 23£ºÕä¹óµÄ»º´æ... 186

Item 24£ºJSPÉè¼Æ´íÎó... 193

Item 25: µ±Servlet HttpSession·¢Éú³åͻʱ... 205

Item 26£ºµ±Applet×ßÏòʧ°Üʱ... 211

Item 27£ºÊÂÎñÐÔLDAP¡ª²»Òª½øÐÐÌá½»... 217

Item 28£ºÓë¹ýÂËÆ÷ÓйصÄÎÊÌâ... 226

Item 29£º¹ØÓÚJSP¸´ÓúÍÄÚÈÝ·¢²¼µÄһЩָµ¼... 236

Item 30£ºÊ¹ÓÃÕýÔò±í´ïʽ½øÐд°ÌåÑéÖ¤... 242

Item 31£ºServletÖеÄʵÀý±äÁ¿... 249

Item 32£ºÊ¹ÓÃServlet´´½¨Êý¾Ý¿âÁ¬½ÓµÄÉè¼ÆÈ±ÏÝ... 258

Item 33£ºÊÔͼÔÚServletÖÐʹÓÃÁ½ÖÖÊä³ö»úÖÆ... 270

Item 34£ºÉñÃØµÄÎļþЭÒé... 276

Item 35£º´ÓServlet¶ÁÈ¡Îļþ... 280

Item 36£ºÌ«¶àµÄÌá½»... 290

µÚÈý²¿·Ö  ÆóÒµ²ã... 303

Item 37£ºJ2EEÌåϵ½á¹¹µÄ¿¼ÂÇ... 305

Item 38£ºÏû³ýÍøÂçÆ¿¾±ÏÝÚåµÄÉè¼Æ²ßÂÔ... 311

Item 39£ºÎÒ½«Ê¹Óñ¾µØ½Ó¿Ú... 317

Item 40£ºÍ¼ÏñµÄÀ§ÈÅ... 324

Item 41£º¶àÖØ²¢·¢½á¹û¼¯µÄÎÊÌâ... 329

Item 42£ºÎªEJBÉú³ÉÖ÷¼ü... 335

Item 43£ºÓÐ״̬µÄÎÞ״̬»á»°Bean. 340

Item 44£ºÎ´×¼±¸µÄPreparedStatement 347

Item 45£ºÌ½Ë÷×ÊÔ´³Ø... 352

Item 46£ºJDO ºÍÊý¾Ý³Ö¾Ã»¯... 358

Item 47£ºWSDLλÓں䦣¿ÔÚUDDIÖÐʹÓÃJAXRµÄÏÝÚå... 371

Item 48£ºJAX-RPCÓ¦ÓóÌÐò¿Í»§´æÔÚµÄЧÂÊÏÝÚå... 389

Item 49£ºÈÃÄãµÄBeanÔ¶ÀëÎÒµÄÎļþϵͳ... 399

Item 50£ºµ±ÊÂÎñ³ö´íʱÈçºÎ±£³ÖÓÐ״̬»á»°EJBµÄÒ»ÖÂÐÔ״̬... 403

Ë÷Òý.............................................................................................................................. 411

µÚÒ»²¿·Ö  ¿Í»§²ã

¡°ÏÖÔÚ£¬Èç¹ûÎÒÃǰѱà³ÌÓïÑÔÖ÷Òªµ±×÷ÊÇÒ»ÖÖ°ÑÎÊÌâÊäÈëµ½»úÆ÷µÄÊֶΣ¬ÄÇô±à³ÌÓïÑÔµÄÖÊÁ¿¾ÍÈ¡¾öÓÚËü¡®³ä·ÖÀûÓûúÆ÷¡¯µÄ³Ì¶È¡£¡±

Edsger W. Dijkstra£¬
¡°Éè¼ÆÓë»úÆ÷Î޹صıà³ÌÓïÑÔ¡±

 

 

ʹÓÃJava¿ª·¢ÒÔ¿Í»§¶ËΪÖ÷µÄÓ¦ÓóÌÐòÔø¾­³öÏÖ¹ýһЩÒýÈËעĿµÄʧ°ÜÏîÄ¿¡£CorelÓÃJava¿ª·¢ÁËÒ»¸ö°ì¹«Ì×¼þ£¬µ«ÔÚ·¢²¼ÁËÒ»¸öÔçÆÚµÄbeta°æÖ®ºó¾Í·ÅÆúÁ˸ÃÏîÄ¿¡£NetscapeÔø³¢ÊÔ¿ª·¢Ò»¸ö´¿Java°æ±¾µÄWebä¯ÀÀÆ÷£¨³ÆÎª¡°Javagator¡±£©£¬µ«Õâ¸ö¹¤³Ì»¹Ã»Óз¢²¼ÈκδúÂë±ãÐû¸æÈ¡Ïû¡£ËäÈ»ÕâЩÊÂÇé·¢ÉúÔÚ¿Í»§¶ËJavaµÄÔçÆÚ½×¶Î£¬´ó¸ÅÊÇÔÚ1997¡«1998ÄêʱÆÚ£¬µ«¶ÔÓÚ¿Í»§¶ËJava¶øÑÔ£¬ÎÞÒÉÒѾ­×÷³öÁËÒ»¸öÁîÈ˾ÚÉ¥µÄ½áÂÛ¡£Òò´Ë£¬ÈËÃǶÔJavaµÄÐËȤÖð½¥×ªÏòÁË·þÎñÆ÷¶Ë¡£µ«ÊÇ£¬¼´Ê¹ÊÇÔÚ·þÎñÆ÷¶ËJavaµÄÒõӰ֮ϣ¬¿Í»§¶ËJavaÈÔÈ»ÔÚÂýÂýµØ¸Ä½ø¡£Ëæ×Åÿ¸öа汾µÄ·¢²¼£¬Javaƽ̨³öÏÖÁ˸ü·á¸»µÄÓû§½Ó¿Ú¡¢¸ü¿ìµÄÐéÄâ»ú¡¢Á£¶È¸ü¾«Ï¸µÄ°²È«Ä£ÐÍÒÔ¼°¸ü·½±ãµÄÍøÂ粿Êð¡£Òò´Ë£¬½èÓÃMicrosoft³£ÓõÄÒ»ÖÖ˵·¨£¬¿Í»§¶ËJavaÒ»Ö±ÔÚÕýÊÓ×ÅËüµÄȱµã£¬²¢Ëæ×Åÿ¸öа汾µÄ·¢²¼Ö𽥸Ľø¡£½ñÌ죬ÎÒÃÇÒѾ­¿´µ½ÁËÐí¶àÓÃJava¿ª·¢µÄÒýÈËעĿ²¢Çҷdz£³É¹¦µÄÉÌÒµÓ¦ÓóÌÐò£¬ÈçThinkFree Office¡¢BorlandµÄJbuilder¡¢TIBCOµÄTurbo XML±à¼­Æ÷ºÍTogetherSoftµÄTogether Control Center UML½¨Ä£¹¤¾ß¡£Òò´Ë£¬ÓÃJava¿ª·¢·á¸»µÄ¿Í»§¶ËÓ¦ÓóÌÐòÊÇÍêÈ«¿ÉÄܵġ£±¾ÊéµÄµÚÒ»²¿·Ö¾ÍÊǰïÖúÄãÔÚÕâ·½ÃæÓÐËù½¨Ê÷¡£

±¾ÊéµÄµÚÒ»²¿·Ö̽ÌÖÁ˿ͻ§¶Ë¿ª·¢µÄ3¸öͨÓÃÁìÓòÖдæÔÚµÄÏÝÚ壺ЧÂÊ¡¢²»Ö±¹ÛµÄÓ¦ÓóÌÐò±à³Ì½Ó¿Ú£¨API£©ºÍ¸üºÃµÄÌæ´ú·½°¸¡£ÕâÀï¸ø³öÁËÿ¸öÁìÓòµÄÏÝÚåµÄһЩҪµã¡£

ЧÂʳ¤ÆÚÒÔÀ´Ò»Ö±Êǿͻ§¶ËJavaΪÈËÚ¸²¡Ö®´¦¡£ÎÒÃǵÄǰһ±¾Ê飬Java Pitfalls£º Time-Saviing Solutions and Workarounds to Improve Programs£¬½²ÊöÁËÐí¶àÓйØÐ§ÂʵÄÏÝÚå¡£Ðí¶àÆäËûÊé¼®ÒÔ¼°Ðí¶àÍøÕ¾µÄÄ¿±ê¶¼ÊÇÖÂÁ¦ÓÚÌá¸ßJavaµÄЧÂÊ¡£Õⲿ·ÖÓÐÁ½¸öºÍЧÂÊÓйصÄÏÝÚ壺

l     NIOµÄЧÂʺÍÏÝÚ壨Item 2£©¡£Õâ¸öItemÑо¿ÁËÐÂIO³ÌÐò°üÔÚIOЧÂÊÉϵĸĽø£¬ËüÑо¿ÁËÎļþͨµÀ£¨File Channel£©¡¢ByteBufferºÍ·Ç×èÈûÐÔ·þÎñÆ÷IO£¨non-blocking server IO£©¡£

l     J2MEµÄЧÂʺÍÏÝÚ壨Item 22£©¡£ÔÚÕâ¸öItemÀÎÒ°ÑÒ»¸öSwingÓ¦ÓóÌÐòÒÆÖ²µ½J2MEƽ̨£¬²¢Õ¹Ê¾ÁËÆäÖеÄAPIÏÝÚåÒÔ¼°³¬¹ý20¸öµÄÕë¶ÔÕâЩСÐÍÉ豸ӦÓóÌÐòµÄÓÅ»¯´ëÊ©¡£

²»Ö±¹ÛµÄAPI¿ÉÄÜ»áÈÃÄãÀË·ÑÊý¸öСʱÈÔȻһÎÞËù»ñ£¬±¾ÊéµÚÒ»²¿·ÖµÄ´ó²¿·ÖÏÝÚåÊôÓÚÕâÒ»Àà¡£ÎÒÃǽ«¶ÔAPI½øÐÐ×Ðϸ·ÖÎö£¬Ñо¿Èí¼þµÄÄÚ²¿¹¤×÷¹ý³Ì£¬²¢ÌṩÕâЩÎÊÌâµÄ½â¾ö·½·¨¡£½â¾ö·½·¨ÓÐÊ±Éæ¼°µ½ÕýÈ·µÄ²Ù×÷ÐòÁУ¬²»Í¬µÄÀàµÄʹÓ㬻òÕß·ÅÆú±ê×¼API£¬Ñ°Ç󿪷ÅÔ´´úÂëµÄÌæ´ú·½°¸¡£

l     µ±Runtime.exec()ÔËÐгö´íʱ£¨Item 1£©¡£Õâ¸öÏÝÚåÊÇÒ»¸öµäÐ͵ÄÓû§ÆÚÍûÖµºÍÒ»¸ö¹¦Äܲ»Í걸µÄAPIÖ®¼ä²»Æ¥ÅäµÄÀý×Ó¡£

l     ÔÚjava.util.loggingÖбÜÃâÁ£¶ÈÏÝÚ壨Item 5£©¡£ÐµÄjava.util.logging API´æÔÚһЩÒþ±ÎµÄ¸´ÔÓÐÔºÍÏ໥¹ØÏµ£¬ËüÃǽ«»áÓ°Ï챨¸æÁ£¶ÈµÄ²ã´Î¡£Äã±ØÐëÀí½âloggerºÍhandlerÖ®¼äµÄ¹ØÏµ£¬ÒÔ±ãÓÐЧµØÊ¹ÓÃÕâ¸öAPI¡£

l     ²éÕÒDOMµÄ´íÎó·½·¨£¨Item 8£©¡£ÔÚJDK 1.4ÖУ¬Javaƽ̨ʹÓÃjavax.xml³ÌÐò°üÌṩÁ˶ÔXMLµÄ±¾µØÖ§³Ö¡£²»ÐÒµÄÊÇ£¬Îĵµ¶ÔÏóÄ£ÐÍ£¨DOM£¬ Document Object Model£©×îÖ±¹ÛµÄ±íʾÐÎʽȴ²»ÊÇÕýÈ·µÄ±íʾÐÎʽ¡£Õâ¸öItemÉîÈëµØÌ½Ë÷ÁËÆäÖеÄÔµÓÉ¡£

l     ±£´æDOMµÄÀ§¾³£¨Item 9£©¡£JAXPÒýÈëÁËһЩ±ê×¼µÄ·½·¨´´½¨ºÍ²Ù×ÝXML DOMÊ÷£¬µ«ËüÔÚ¶ÔËüÃǽøÐг־û¯·½ÃæµÄÄÜÁ¦½ÏÈõ¡ª¡ªÕâÆÈʹ¿ª·¢ÈËԱʹÓÃÒÀÀµ±àÒëÆ÷µÄ·½·¨¡£Õâ¸öItemÌÖÂÛÁËÕâ·½ÃæµÄÌôÕ½¡£

l     Ö´ÐеÄʧ°Ü£¨Item 13£©¡£Java Archive»òJARÊÇJava×é¼þ¶þ½øÖÆ·¢²¼µÄÖ÷ÒªÐÎʽ¡£Òź¶µÄÊÇ£¬ÔÚÕâЩÎļþµÄ¹¤×÷Ô­ÀíÒÔ¼°Ö´Ðз½Ê½·½Ãæ´æÔںܴóµÄ»ìÏý¡£Õâ¸öItem̽Ë÷ÁËÕâЩÎÊÌâ²¢¶ÔʹÓÃJARÎļþµÄ×î¼Ñ·½Ê½ÌṩÁ˽âÊÍ¡£

l     µ±POSTµ½Ò»¸öURLÎÞ·¨ÈçԸʱ£¨Item 17£©¡£java.net APIÖеÄURLºÍURLConnectionÀàÊÇÔÚÒ»¸öÏ൱¸ßµÄ³éÏó²ã´ÎÉè¼ÆµÄ£¬ËüÃǺÜÈÝÒ×ÒýÆð»ìÏý¡£Õâ¸öItemչʾÁËһЩʹÓÃAPIµÄ²»ÕýÈ··½·¨£¬½ÒʾÁËÕâЩȱÏݱ³ºóµÄÔ­Òò£¬²¢ÌṩÁËÕâ¸öÎÊÌâµÄÒ»¸ö½â¾ö·½°¸ÒÔ¼°Ò»¸ö¿ª·ÅÔ´´úÂëÌæ´ú·½°¸¡£

Ëæ×ÅÆ½Ì¨µÄÖð½¥ÀÏ»¯ÒÔ¼°²»µÃ²»ÑØÓÃÇ·¼ÑµÄ·½°¸ÒÔά³ÖÏòºó¼æÈÝ£¬´æÔÚ±ê×¼Ö®ÍâµÄ¸üºÃÌæ´ú·½°¸Õâ¸öÎÊÌâ¿ÉÒÔ˵ÊÇÈÕ½¥Í¹ÏÖ¡£³ýÁËÆ½Ì¨ÖÐеÄAPIÖ®Í⣬¿ª·ÅÔ´´úÂëÌæ´ú·½°¸ÔÚÐí¶à·þÎñÁìÓò¶¼Ö¤Ã÷ÁË×Ô¼ºÊÇ×î¼Ñ·½°¸¡£

l     ÎÒÄþÔ¸²»Ê¹ÓÃÊôÐÔ£¨Item 3£©¡£Õâ¸öItemչʾÁËPropertiesÀàµÄһЩÈõµã£¬²¢ËµÃ÷ÁËΪʲô˵java.util.prefs³ÌÐò°üÌṩÁËÒ»¸ö¸üºÃµÄ½â¾ö·½°¸¡£

l     µ±ÐÅÏ¢Òþ²ØµÃÌ«¶àʱ£¨Item 4£©¡£¶Ô³éÏóÊÂÎï¶øÑÔ£¬¿ª·¢ÈËÔ±³£³£Óöµ½µÄÒ»¸öÎÊÌâÊÇËü¿ÉÄÜÏò¿ª·¢ÈËÔ±Òþ²ØÒ»Ð©ÖØÒªµÄÐÅÏ¢¡£Òì³£¾ÍÊÇÒ»¸öµäÐ͵ÄÀý×Ó¡£Õâ¸öItemչʾÁËÔÚеÄJDK 1.4ÖУ¬Á´Ê½Òì³£¹¤¾ßÊÇÈçºÎ½â¾öÕâ¸öÎÊÌâµÄ¡£

l     µ±±ê×¼APIµÄʵÏÖ·¢Éú³åͻʱ£¨Item 6£©£ºÔÚXML³ÉΪJDK 1.4µÄÒ»²¿·ÖÖ®ºó£¬ËæÖ®Á¢¼´²úÉúÁËÒ»¸öÎÊÌ⣬¾ÍÊÇXML±ê×¼ºÍJDK°æ±¾Ö®¼äµÄ²»Í¬²½¡£±¾½Ú½«½éÉÜJDK 1.4ÊÇÈçºÎ¶ÔÕâЩÒѾ­ÈϿɵıê×¼µÄ¸üÐÂÌṩ֧³ÖµÄ¡£

l     ¶ÏÑÔ¾ø·Ç¶àÓࣨItem 7£©¡£´ÓÐÂÌØÐÔµÄÒýÈëµ½´ó²¿·Ö³ÌÐòÔ±²ÉÄÉÕâ¸öÌØÐÔͨ³£ÓÐÒ»¸öʱ¼äÉϵÄÑÓ³Ù¡£¶ÔÓÚÏñ¶ÏÑÔÕâÖֹؼüµÄ¿É¿¿ÐÔ·½ÃæµÄ¸Ä½ø£¬ÕâÖÖ²ÉÄÉÑÓ³ÙÊÇÒ»¸öÑÏÖØµÄÎÊÌâ¡£Õâ¸öItem½«Ö¸µ¼ÄãÈçºÎʹÓÃÕâ¸öÖØÒªµÄ¹¤¾ß¡£

l     Apache AntºÍÉúÃüÖÜÆÚ¹ÜÀí£¨Lifecycle Management£©£¨Item 11£©¡£ËäÈ»µÚÒ»²¿·ÖµÄ¾ø´ó¶àÊýÏÝÚå³öÏÖÔÚÓïÑÔºÍAPI²ã´Î£¬µ«Õâ¸öÏÝÚåµÄÊÓÒ°¸üΪ¹ãÀ«£¬ËüѰÕÒÒ»ÖÖÈí¼þÉúÃüÖÜÆÚ¹ÜÀíµÄ¸üºÃÌæ´ú·½°¸¡£¶ÔÓÚÍŶӿª·¢¶øÑÔ£¬ºöÊÓÀàËÆAntÕâÑùµÄ´´½¨¹¤¾ß¿ÉÒÔ˵ÊÇÒ»¸öÑÏÖØµÄÏÝÚå¡£

l     JUnit£ºµ¥Ôª²âÊÔʹÊÂÎï±äµÃ¼òµ¥£¨Item 12£©¡£ºÍAnt´´½¨¹¤¾ßÒ»Ñù£¬JUnitÒ²ÊÇÒ»¸ö·Ç³£ÖØÒªµÄ¹¤¾ß¡£Í¨¹ýµ¥Ôª²âÊÔ£¬Ëü¿ÉÒÔÈ·±£´úÂëµÄÖÊÁ¿¡£Õâ¸öItemչʾÁËÈçºÎÓÐЧµØÊ¹ÓÃJUnit£¬²¢½âÊÍÁËΪʲôºöÂÔËüÊÇÒ»¼þÔã¸âµÄÊ¡£

l     ʹÓÃIterationÌæ´úEnumeration£¨Item 21£©¡£Collection API±»Ö¤Ã÷ÊǸßЧµÄÇÒºÜÊÜ»¶Ó­¡£Õâ¸öItem½ÒʾÁËEnumerationµÄʵÏÖËù´æÔÚµÄÒ»¸öÈõµã£¬²¢¶ÔÆäÄÚ²¿Ï¸½Ú½øÐÐÁËÑо¿£¬ÕÒ³öÁËÎÊÌâµÄ¸ùÔ´£¬Õ¹Ê¾ÁËIterationÊÇÈçºÎ½â¾öÕâ¸öÎÊÌâµÄ¡£

±¾ÊéµÄµÚÒ»²¿·Ö°üÀ¨22¸öÏÝÚ壬¸²¸ÇÁËÐí¶àÐèÒª±ÜÃâµÄ¿Í»§¶ËÏÝÚ塣ʹÓÃÕâЩ½â¾ö·½·¨ºÍ¼¼ÇÉʹÄãÄܹ»´´½¨½¡×³µÄ¿Í»§¶ËÓ¦ÓóÌÐò£¬¡°¸üºÃµØÀûÓûúÆ÷¡±¡£Õⲿ·ÖÊ£ÓàµÄÏÝÚ廹ÓУº

l     Êó±ê°´Å¥µÄ¿ÉÒÆÖ²ÐÔ£¨Item 10£©¡£JavaÊÇ¿ª·¢¿çƽ̨ӦÓóÌÐòµÄÓÅÐãÑ¡Ôñ¡£²»ÐÒµÄÊÇ£¬²¢²»ÊÇËùÓÐµÄÆ½Ì¨¶¼ÊÇÏàͬµÄ£¬ÓÈÆäÊÇÉæ¼°×î³£¼ûµÄÊäÈëÉ豸¡ª¡ªÊó±êʱ¡£Õâ¸öItemչʾÁËÔÚ²»Í¬µÄÊäÈëÉ豸֮¼ä½øÐй¤×÷ËùÃæÁÙµÄÌôÕ½¡£

l     ÄãÊÕ¼¯ÁËʲô£¨Item 14£©¡£ÔÚ´¦ÀíCollection APIʱ£¬³éÏó¹ý¶ÈÕâ¸öÎÊÌâ±äµÃ¸ñÍâ¼âÈñ¡£Õâ¸öItemչʾÁËһЩ¼¯ºÏµÄÔªËØÀàÐÍδ֪µÄÀý×Ó£¬²¢ÌÖÂÛÁ˽â¾öÕâ¸öÎÊÌâµÄ×îвßÂÔ¡£

l     ±ÜÃâSingletonÏÝÚ壨Item 15£©¡£Singleton£¨µ¥¼þ£©Ä£Ê½ÊÇÒ»Öֹ㷺ʹÓõÄJava¿ª·¢Ä£Ê½¡£²»ÐÒµÄÊÇ£¬ÔÚÈçºÎʹÓÃSingleton·½Ã棬¿ª·¢ÈËÔ±³£³£»á³öÏÖÐí¶à´íÎó¡£Õâ¸öItem˵Ã÷ÁËÕâЩ´íÎ󣬲¢½¨ÒéÁËһЩ½â¾ö°ì·¨¡£

l     µ±setSize()ÎÞ·¨ÈçԸʱ£¨Item 16£©¡£¿ª·¢ÈËÔ±£¨ÓÈÆäÊÇÄÇЩÐÂÊÖ£©³£³£»áʹÓÃһЩ·½·¨£¬µ«ËûÃǶÔÓë´ËÏà¹ØÁªµÄAPIȴûÓÐÒ»¸öÈ«ÃæµÄÀí½â¡£Õâ·½ÃæÒ»¸öºÜºÃµÄÀý×Ó¾ÍÊÇsetSize()·½·¨µÄʹÓã¬Ëü¿ÉÄܻᵼÖÂÒâÏë²»µ½µÄ½á¹û¡£Õâ¸öItem²»½öÑо¿ÁËsetSize()·½·¨µÄ´íÎóÓ÷¨£¬¶øÇÒÌÖÂÛÁ˲¼¾Ö¹ÜÀíÆ÷£¨Layout Manager£©µÄ¸ÅÄî¡£

l     ÓÐЧµÄ×Ö·û´®±ê¼Ç»¯£¨Item 18£©¡£StringTokenizerÀàµÄ²Ù×÷³£³£±»ÈËÎó½â¡£Óöà×Ö·û×÷Ϊ¶¨½ç·ûµÄ×Ö·û´®ÓÐʱ»á³öÏÖһЩÓÐȤµÄÎÊÌâ¡£Õâ¸öItem¶ÔÕâЩÎÊÌâ½øÐÐÁËÑо¿£¬²¢½âÊÍÁËÈçºÎ±ÜÃâÕâЩÎÊÌâ¡£

l     JLayered PaneÏÝÚ壨Item 19£©¡£Õâ¸öItemÑо¿ÁËÓëʹÓÃSwingµÄLayered PaneÓйصÄÎÊÌ⣬ÓÈÆäÊÇÔÚËüÉÏÃæÊ¹Óò¼¾Ö¹ÜÀíÆ÷ÓйصÄÄÇЩÎÊÌâ¡£

l     µ±File.renameTo()ÔËÐгö´íʱ£¨Item 20£©¡£ÔÚJavaÖУ¬ÎļþµÄÏ໥×÷ÓÿÉÄܵ¼ÖÂÒâÏë²»µ½µÄ½á¹û£¬ÓÈÆäÊÇÔÚ¿çÎļþϵͳ»ò¿çƽ̨µÄÇé¿öÏ¡£Õâ¸öItem̽ÌÖÁËÕâЩÒâÏë²»µ½µÄ½á¹û£¬²¢ÌṩÁËÕâЩÎÊÌâµÄ½â¾ö·½°¸¡£

Item 1£ºµ±Runtime.exec()ÔËÐгö´íʱ[2]

java.lang.RuntimeÀàÓÐÒ»¸ö¾²Ì¬·½·¨³ÆÎªgetRuntime()£¬ËüÓÃÓÚ»ñÈ¡µ±Ç°µÄJavaÔËÐÐʱ»·¾³¡£Èç¹ûÄãÏë»ñµÃÒ»¸öRuntime¶ÔÏóµÄÒýÓã¬ÕâÊÇΩһµÄ·½·¨¡£ÓÐÁËÕâ¸öÒýÓÃÖ®ºó£¬Äã¿ÉÒÔµ÷ÓÃRuntimeÀàµÄexec()·½·¨À´ÔËÐÐÍⲿ³ÌÐò¡£Æô¶¯ä¯ÀÀÆ÷ÏÔʾijЩÀàÐ͵ÄHTMLÐÎʽµÄ°ïÖúÒ³ÃæÍùÍù¾ÍÐèÒªÕâÑù×ö¡£exec()·½·¨¹²ÓÐ4¸öÖØÔØ°æ±¾£¬ËüÃǵÄÔ­ÐÍÈçÏ£º

l   public  Process exec(String  command)£»

l   public  Process exec(String [] cmdArray)£»

l   public  Process exec(String command£¬ String [] envp)£»

l   public  Process exec(String [] cmdArray£¬ String [] envp)£»

ËùÓÐÕâЩ·½·¨±³ºóµÄ»ù±¾Ë¼Â·ÊÇ£º°ÑÒ»¸öÃüÁ¿ÉÄÜ»¹ÓÐÒ»×é²ÎÊý£©´«µÝ¸øÒ»¸öÒò²Ù×÷ϵͳ¶øÒìµÄº¯Êýµ÷Ó㬽«Ò»¸öProcessÀàµÄÒýÓ÷µ»Ø¸øJavaÐéÄâ»ú£¨VM£©£¬´Ó¶ø´´½¨Ò»¸öÒò²Ù×÷ϵͳ¶øÒìµÄ½ø³Ì£¨Ò»¸öÔËÐÐÖеijÌÐò£©¡£ProcessÀàÊÇÒ»¸ö³éÏóÀ࣬ÕâÊÇÒòΪÿ¸ö²Ù×÷ϵͳ¶¼ÓÐÒ»¸öÌØ¶¨µÄProcessÀàµÄ×ÓÀà¡£ÕâЩ·½·¨ÓÐ3ÖÖ¿ÉÄܵÄÊäÈë²ÎÊý£ºµ¥¸öString²ÎÊý£¬Ëüͬʱ±íʾÐèÒªÖ´ÐеijÌÐòºÍ¸Ã³ÌÐòµÄËùÓвÎÊý£»Ò»¸öStringÊý×飬Ëü½«³ÌÐò¼°Æä²ÎÊýÇø·Ö¿ªÀ´±íʾ£»Ò»¸ö»·¾³±äÁ¿Êý×飬»·¾³±äÁ¿²ÎÊý¸ù¾Ýname=valueÕâÑùµÄ¸ñʽ½øÐд«µÝ¡£×¢Ò⣬Èç¹ûÄãʹÓõÄexec()·½·¨Ê¹ÓõÄÊǼȱíʾ³ÌÐòÓÖ±íʾÆä²ÎÊýµÄµ¥¸öString²ÎÊý£¬³ÌÐò¶ÔÕâ¸öString²ÎÊý½øÐнâÎöʱʹÓÿհ××÷Ϊ·Ö¸ô·û£¬ÕâÊÇͨ¹ýStringTokenizerÀàʵÏֵġ£

ÏÖÔÚ³£¼ûµÄ¶ÔÒ»¸öAPIµÄÊ״βâÊÔ¾ÍÊÇÓÃËü×îÏÔ¶øÒ×¼ûµÄ·½·¨½øÐбàÂë¡£ÀýÈ磬ΪÁËÖ´ÐÐÒ»¸öJVMÍⲿµÄ½ø³Ì£¬ÎÒÃÇʹÓÃexec()·½·¨¡£ÎªÁ˹۲ìÍⲿ½ø³ÌµÄ·µ»ØÖµ£¬ÎÒÃÇʹÓÃProcessÀàµÄexitValue()·½·¨¡£ÔÚÎÒÃǵĵÚ1¸öÀý×ÓÖУ¬ÎÒÃÇÊÔͼִÐÐJava±àÒë³ÌÐò£¨javac.exe£©¡£³ÌÐòÇåµ¥1.1¾Í¸ºÔðÖ´ÐÐÕâÏîÈÎÎñ¡£

³ÌÐòÇåµ¥ 1.1  BadExecJavac.java

   

ÔËÐÐBadExecJavac³ÌÐò²úÉúÏÂÃæµÄÊä³ö£º

  

Õâ¸ö³ÌÐòÎÞ·¨ÔËÐУ¬ÒòΪÈç¹ûÍⲿ½ø³ÌÉÐδÍê³É£¬exitValue()·½·¨½«Å׳öÒ»¸öIllegalThreadStateExceptionÒì³££¬ÎĵµÖоÍÊÇÕâÑùÃèÊöµÄ¡£µ«ÕâȷʵÏÔµÃÆæ¹Ö£¬ÈËÃÇÈ̲»×¡ÒªÎÊ£ºÎªÊ²Ã´²»ÈÃÕâ¸ö·½·¨¼ÌÐøµÈ´ý£¬Ö±µ½Ëü¿ÉÒÔ¸øÎÒÃÇÒ»¸öÓÐЧµÄ´ð°¸ÄØ£¿ÔÙ´Î×ÐϸÉóÊÓProcessÀàËùÌṩµÄ·½·¨Ö®ºó£¬ÎÒÃÇ¿ÉÒÔ·¢ÏÖwaitFor()·½·¨¾ÍÊÇÓÃÓÚÖ´ÐÐÕâÏîÈÎÎñµÄ¡£ÊÂʵÉÏ£¬waitFor()·½·¨·µ»ØÒ»¸öÍ˳öÖµ£¬ÕâÒâζ×ÅÄã²»»áͬʱʹÓÃÕâÁ½¸ö·½·¨¡£ÄãҪôѡÔñwaitFor()£¬ÒªÃ´Ñ¡ÔñexitValue()¡£ÄãΩһ¿ÉÄÜʹÓÃexitValue()·½·¨Ìæ´úwaitFor()·½·¨µÄÔ­ÒòÊÇÄ㲻ϣÍû³ÌÐòÒòΪµÈ´ýÒ»¸ö¿ÉÄÜÓÀÔ¶Ò²²»»áÍê³ÉµÄÍⲿ½ø³Ì¶ø×èÈû¡£´Ó¸öÈ˵ĽǶȽ²£¬ÎÒÇãÏòÓÚÈÃexitValue()·½·¨¾ßÓÐÒ»¸öÃûΪwaitForµÄ²¼¶ûÐͲÎÊý£¬ÓÃÓÚÈ·¶¨µ±Ç°Ïß³ÌÊÇ·ñÓ¦¸Ã½øÐеȴý¡£ÎÒÈÏΪʹÓÃÒ»¸ö²¼¶ûÐͲÎÊýµÄ·½°¸¸üºÃһЩ£¬ÒòΪexitValue()Õâ¸öÃû×ÖÓÃÓÚÕâ¸ö·½·¨¸üΪǡµ±Ò»Ð©¡£ÎÒÃÇûÓбØÒªÈÃÁ½¸ö²»Í¬µÄ·½·¨ÔÚ²»Í¬µÄÌõ¼þÏÂÖ´ÐÐÏàͬµÄ¹¦ÄÜ¡£ÕâÖÖ¼òµ¥µÄ¡°Ìõ¼þ¡±Çø·Öͨ¹ýʹÓÃÒ»¸öÊäÈë²ÎÊý¾ÍÍêÈ«¿ÉÒԴﵽĿµÄ¡£

ËùÒÔ£¬ÓëRuntime.exec()·½·¨Ïà¹ØµÄµÚ1¸öÏÝÚå¾ÍÊÇҪСÐÄIllegalThreadStateExceptionÒì³££¬Äã¿ÉÒÔ²¶×½Õâ¸öÒì³££¬Ò²¿ÉÒԵȴý½ø³ÌÍê³É¡£ÏÖÔÚ£¬ÈÃÎÒÃǶÔÉÏÃæÕâ¸ö³ÌÐò½øÐÐÐÞÕý£¬Ñ¡ÔñµÈ´ý½ø³ÌÍê³É¡£ÔÚ³ÌÐòÇåµ¥1.2ÖУ¬³ÌÐòÈÔÈ»³¢ÊÔÖ´ÐÐjavac.exe³ÌÐò£¬²¢½øÐеȴý£¬Ö±µ½Õâ¸öÍⲿ½ø³ÌÍê³É¡£

³ÌÐòÇåµ¥ 1.2  BadExecJavac2.java

      

Òź¶µÄÊÇ£¬ÔËÐÐBadExecJavac2³ÌÐò²»»á²úÉúÈκÎÊä³ö¡£Õâ¸ö³ÌÐò½«»á¹ÒÆð£¬ÓÀÔ¶²»»áÍê³É¡£ÎªÊ²Ã´javac½ø³ÌÓÀÔ¶²»»áÍê³ÉÄØ£¿javadocÎĵµÌṩÁ˴𰸣º¡°ÓÉÓÚÓÐЩ±¾µØÆ½Ì¨Îª±ê×¼ÊäÈëºÍÊä³öÁ÷ËùÌṩµÄ»º³åÇø´óСÓÐÏÞ£¬Èç¹û²»Äܼ°Ê±Ð´Èë×Ó½ø³ÌµÄÊäÈëÁ÷»òÕß¶ÁÈ¡×Ó½ø³ÌµÄÊä³öÁ÷£¬¿ÉÄܵ¼ÖÂ×Ó½ø³Ì×èÈû£¬ÉõÖÁÏÝÈëËÀËø£¨deadlock£©¡±¡£ÄÇô£¬ÕâÊÇ·ñÊdzÌÐòԱûÓС°RTFM[3]¡±¶øµ¼ÖµÄÒ»ÖÖÇé¿öÄØ£¿´ÓijÖֽǶȽ²£¬È·ÊµÈç´Ë¡£ÔÚÕâ¸öÀý×ÓÖУ¬ÔĶÁÊֲὫʹÄã½øÍËÁ½ÄÑ¡£ÊÖ²á¸æËßÄãÐèÒª¶ÔÍⲿ½ø³ÌµÄÁ÷½øÐд¦Àí£¬µ«Ëü²¢Ã»ÓиæËßÄã¸ÃÔõô×ö¡£³ýÁËRTFMÖ®Í⣬µ±ÄãÔÚÐÂÎÅ×éÑо¿Õâ¸öAPI³£¼ûµÄÎÊÌâºÍ´íÎóʱ£¬ºÜ¿ÉÄܺöÊÓÒ»¸öʵ¼ÊÉϺÜÖØÒªµÄÒòËØ¡£Runtime.exec()ºÍProcessÀàËùÌṩµÄAPI¿´ÉÏÈ¥¼«Îª¼òµ¥£¬µ«Æäʵ°µ²ØÐþ»ú£¬ÒòΪÕâЩAPIµÄ¼òµ¥£¨»òÕß˵ÊÇÏÔ¼û£©Ó¦ÓúÜÈÝÒ×·¢Éú´íÎó¡£

ÔÚ´Ë£¬APIÉè¼ÆÕߵĽÌѵÊǼòµ¥µÄAPIÓ¦¸ÃÓÃÓÚ¼òµ¥µÄ²Ù×÷¡£ÄÇЩÇ÷ÓÚ¸´ÔÓ»òÕß¾ßÓÐÌØ¶¨Æ½Ì¨ÒÀÀµÐԵIJÙ×÷Ó¦¸Ã׼ȷµØ·´Ó³ËüÃǵĸÅÄîÓò¡£¶ÔÊÂÎïµÄ³éÏó×öµÃ¹ýÍ·ÆäʵҲ²»ºÃ£¬ÕýËùν¹ýÓ̲»¼°Âï¡£Ò»¸ö¸üºÃµÄÓÃÓÚ´¦ÀíÕâЩ²Ù×÷µÄAPIÀý×ÓÊÇJConfig³ÌÐò¿â£¨http£º//www.tolstoy.com/samizdat/jconfig.html£©¡£Òò´Ë£¬ÏÖÔÚÈÃÎÒÃǰ´ÕÕÎĵµµÄÒªÇó¶Ôjavac½ø³ÌµÄÊä³ö½øÐд¦Àí¡£µ±Äã²»ÓÃÈκβÎÊýÔËÐÐjavac³ÌÐòʱ£¬Ëü½«Õ¹Ê¾Ò»×éÓ÷¨ËµÃ÷£¬ÃèÊö³ÌÐòµÄÓ÷¨ÒÔ¼°ËùÓпÉÓõijÌÐòÑ¡ÏîµÄº¬Òå¡£Èç¹ûÄãÖªµÀÁËÕâЩÐÅÏ¢½«ËÍÍùstderrÁ÷£¬¾ÍºÜÈÝÒ×±àдһ¸ö³ÌÐòÔڵȴý½ø³ÌÍ˳ö֮ǰºÄ¾¡Õâ¸öÁ÷¡£³ÌÐòÇåµ¥1.3¾ÍÊÇÖ´ÐÐÕâÏ×÷µÄ¡£ËäÈ»ÕâÖÖ·½·¨¿ÉÒԴﵽĿµÄ£¬µ«Õâ²¢²»ÊÇÒ»ÖÖÓÅÐãµÄͨÓýâ¾ö·½°¸¡£ÕâÒ²ÊdzÌÐòÇåµ¥1.3Ϊʲô±»ÃüÃûΪMediocreExecJavacµÄÔ­Òò¡£ËüÖ»ÊǸöÒ»°ã£¨mediocre£©µÄ½â¾ö·½°¸£¬Ò»¸ö¸üºÃµÄ½â¾ö·½°¸ÊǼÈÇå¿Õ±ê×¼´íÎóÁ÷ÓÖÇå¿Õ±ê×¼Êä³öÁ÷£¬×îºÃµÄ½â¾ö·½°¸ÔòÊÇͬ²½Çå¿ÕÕâÁ½¸öÁ÷£¨Õâ¸öÁô´ýÒÔºó˵Ã÷£©¡£

³ÌÐòÇåµ¥ 1.3  MediocreExecJavac.java

ÔËÐÐMediocreExecJavac³ÌÐò½«µÃµ½ÏÂÃæµÄÊä³ö£º

  

ÈçÉÏËùʾ£¬MediocreExecJavac³ÌÐò¿ÉÒÔÔËÐУ¬²¢ÇÒ²úÉúÍ˳öÖµ2¡£ÔÚÕý³£Çé¿öÏ£¬Í˳öÖµ0Òâζ×ųɹ¦£¬·Ç0ÖµÒâζ×Å´íÎó¡£Òź¶µÄÊÇ£¬ÕâЩÍ˳öÖµµÄº¬ÒåÒò²Ù×÷ϵͳ¶øÒì¡£ÔÚWin32ÖУ¬ÖµÎª2µÄ´íÎó´úÂë±íʾ¡°ÎļþδÕÒµ½¡±¡£ÕâÊǺϺõµÀÀíµÄ£¬ÒòΪjavacÆÚÍûÎÒÃÇÔÚ³ÌÐòÃûµÄºóÃæÊäÈëÐèÒª±àÒëµÄÔ´´úÂëÎļþ¡£ËùÒÔ£¬Ê¹ÓÃRuntime.exec()·½·¨Ó¦¸Ã±ÜÃâµÄµÚ2¸öÏÝÚåÊÇ£ºÈç¹ûÄãËùÔËÐеÄÍⲿ³ÌÐò½«µÃµ½Êä³ö»òÕßÆÚ´ýÊäÈ룬ÄãÓ¦¸ÃÈ·±£ÔÚÄãµÄ½ø³ÌÖжÔÊäÈëºÍÊä³öÁ÷½øÐд¦Àí¡£

ÈÃÎÒÃǻص½Windowsϵͳ£¬Ðí¶à³ÌÐòÔ±ÐÂÊÖÔÚÊÔͼʹÓÃRuntime.exec()·½·¨´¦Àí·Ç¿ÉÖ´ÐÐÃüÁîÈçdirºÍcopyʱ»á¸Ðµ½ÎªÄÑ¡£Òò´Ë£¬ÎÒÃǰÑexec()·½·¨µÄ²ÎÊý´Ó¡°javac¡±»»³É¡°dir¡±£¬ÈçÏÂËùʾ£º

Process proc = rt.exec(¡°dir¡±)£»

ÎÒÃÇ´´½¨Ò»¸öÃû½ÐBadExecWinDirµÄ³ÌÐò£¬³ýÁËÉÏÃæÕâÐдúÂëÍ⣬ËüºÍMediocreExecjavacÏàͬ¡£ÔËÐÐÕâ¸ö³ÌÐò²úÉúÏÂÃæµÄÊä³ö£º

      

Ç°ÃæÎÒÒѾ­Ëµ¹ý£¬´íÎóÖµ2±íʾÎļþδÕÒµ½£¬Ò²¾ÍÊÇ˵ÃûΪdir.exeµÄ¿ÉÖ´ÐÐÎļþδÄÜÕÒµ½¡£ÕâÊÇÒòΪdirÃüÁîÊÇWindowsÃüÁî½âÊÍÆ÷µÄÒ»²¿·Ö£¬Ëü²¢²»ÊÇÒ»¸öµ¥¶ÀµÄ¿ÉÖ´ÐгÌÐò¡£ÎªÁËÔËÐÐWindowsÃüÁî½âÊÍÆ÷£¬¸ù¾ÝÄãËùʹÓõÄWindows²Ù×÷ϵͳ£¬Äã»òÕßÖ´ÐÐcommand.com£¬»òÕßÖ´ÐÐcmd.exe¡£³ÌÐòÇåµ¥1.4ÔËÐÐWindowsÃüÁî½âÊÍÆ÷µÄÒ»·Ý¿½±´£¬È»ºóÖ´ÐÐÓû§ÌṩµÄÃüÁÈçdir£©¡£

³ÌÐòÇåµ¥1.4  GoodWindowsExec.java

 

ÓÃdirÃüÁî×÷Ϊ²ÎÊýÔËÐÐGoodWindowsExec³ÌÐò²úÉúÏÂÁÐÊä³ö£º

ÓÃÈκιØÁªµÄÎĵµÀàÐÍÔËÐÐGoodWindowsExec³ÌÐò½«Æô¶¯Óë¸ÃÎĵµÀàÐÍÏà¹ØÁªµÄÓ¦ÓóÌÐò¡£ÀýÈ磬ΪÁËÆô¶¯Microsoft WordÏÔʾһ¸öWordÎĵµ£¨À©Õ¹ÃûΪ.doc£©£¬Äã¿ÉÒÔʹÓÃÏÂÃæµÄÊäÈ룺

 

>java org.javapitfalls.item1.GoodWindowsExec ¡°yourdoc.doc¡±

 

×¢ÒâGoodWindowsExecʹÓÃos.nameϵͳÊôÐÔÅжÏÄãÕýÔÚÔËÐеÄWindows²Ù×÷ϵͳµÄÀàÐÍ£¬²¢¾Ý´ËʹÓÃÕýÈ·µÄÃüÁî½âÊÍÆ÷¡£Ö´ÐÐÃüÁî½âÊͳÌÐòÖ®ºó£¬ÎÒÃÇʹÓÃStreamGobblerÀà´¦Àí±ê×¼´íÎóºÍ±ê×¼ÊäÈëÁ÷¡£StreamGobblerÀàÔÚÒ»¸öµ¥¶ÀµÄÏß³ÌÀïÇå¿ÕÈκÎ×÷Ϊ²ÎÊý´«µÝ¸øËüµÄÁ÷¡£µ±Õâ¸öÀà°Ñ¸Õ¸Õ¶ÁÈ¡µÄÊäÈëÐдòÓ¡µ½¿ØÖÆÌ¨£¨console£©Ê±£¬ËüʹÓÃÒ»¸ö¼òµ¥µÄStringÀàÐͱíʾËüÕýÔÚÇå¿ÕµÄÊÇÄĸöÁ÷¡£ËùÒÔ£¬ÎÒÃÇÐèÒª±ÜÃâµÄµÚ3¸öÏÝÚåÊÇŪÇåÄãÕýÔÚÖ´ÐеÄÊÇÒ»¸ö¶ÀÁ¢µÄ¿ÉÖ´ÐгÌÐò»¹ÊÇÒ»¸ö¾­¹ý½âÊ͵ÄÃüÁî¡£ÔÚ±¾½ÚµÄ×îºó£¬ÎÒ½«Õ¹Ê¾Ò»¸ö¼òµ¥µÄÃüÁîÐй¤¾ß£¬Ëü¿ÉÒÔ°ïÖúÄãÅжÏÄãËùÔËÐеÄÊÇÄÄÖÖÀàÐ͵ijÌÐò¡£

ÖµµÃ×¢ÒâµÄÊÇÔÚProcessÀàÖУ¬ÓÃÓÚÈ¡µÃ½ø³ÌÊä³öÁ÷µÄ·½·¨³ÆÎªgetInputStream()¡£ÎÒÃÇÕâÀïÌáµ½Êä³öÁ÷£¬ÊÇÒòΪվÔÚJava³ÌÐòµÄ½Ç¶È¶ø²»ÊÇÍⲿ½ø³ÌµÄ½Ç¶È¡£ËùÒÔ£¬Íⲿ½ø³ÌµÄÊä³ö¾ÍÊÇJava³ÌÐòµÄÊäÈë¡£´ÓÕâ¸ö½Ç¶ÈÀ´¿´£¬Íⲿ½ø³ÌÖеÄÊäÈëÁ÷ÔÚJava³ÌÐòÖбã³ÉÁËÊä³öÁ÷¡£

ºÍRuntime.exec()·½·¨ÓйصÄ×îºóÒ»¸öÏÝÚå¾ÍÊDz»ÒªÒÔΪexec()Äܹ»½ÓÊÜÃüÁîÐУ¨»òshell£©ËùÄܽÓÊܵÄËùÓÐString²ÎÊý¡£Õâ¸öÏÝÚå²¢²»ÑÏÖØ£¬¶øÇÒ²¢²»ÊÇËùÓÐµÄÆ½Ì¨¶¼´æÔÚÕâ¸öÎÊÌâ¡£Õâ¸öÏÝÚåµÄ×îÖ÷ÒªÓÕÒòÊÇÓû§ÔÚʹÓÃexec()·½·¨Ê±ÊÔͼÈÃËüÏñÃüÁîÐÐÒ»Ñù½ÓÊܵ¥¸öString²ÎÊý¡£Õâ¸ö»ìÏýºÜ¿ÉÄÜÊÇÓÉÓÚexec()·½·¨µÄ²ÎÊýÃûÊÇcommandËùÖ¡£³ÌÐòÔ±¿ÉÄÜ»á´íÎ󵨰Ñcommand²ÎÊýºÍÈκÎÄã¿ÉÒÔÔÚÃüÁîÐÐÖÐÊäÈëµÄ¶«Î÷ÁªÏµÆðÀ´£¬¶ø²¢Ã»ÓÐÒâʶµ½command²ÎÊýÓ¦¸ÃÊÇÒ»¸ö³ÌÐòÃûºÍ¸Ã³ÌÐòµÄ²ÎÊý¡£ÀýÈ磬Óû§ÊÔͼִÐÐÒ»¸ö³ÌÐò£¬²¢ÔÚexec()·½·¨ÖжԳÌÐòµÄÊä³ö½øÐÐÖØ¶¨Ïò¡£³ÌÐòÇåµ¥1.5ÊÔͼִÐÐÕâÏîÈÎÎñ¡£

³ÌÐòÇåµ¥1.5  BadWinRedirect.java

ÔËÐÐBadWinRedirect³ÌÐò²úÉúÏÂÁÐÊä³ö£º

BadWinRedirect³ÌÐòÊÔͼ°ÑÒ»¸ö¼òµ¥µÄJava°æecho³ÌÐòµÄÊä³öÖØ¶¨Ïòµ½Îļþtest.txt¡£È»¶ø£¬µ±ÎÒÃǶÔÊä³ö½á¹û½øÐмì²é£¬¹Û²ìtest.txtÎļþÊÇ·ñÒѱ»´´½¨Ê±£¬½á¹û·¢ÏÖËü²¢²»´æÔÚ¡£jecho³ÌÐò¼òµ¥µØ½ÓÊÜËüµÄÃüÁîÐвÎÊý²¢°ÑËüÃÇдÈëµ½±ê×¼Êä³öÁ÷¡£jecho³ÌÐòµÄÔ´´úÂë¿ÉÒÔÔÚWebÕ¾µãÕÒµ½¡£Óû§ÒÔΪÄã¿ÉÒÔÏñÔÚÒ»¸öDOSÃüÁîÐÐÖÐÄÇÑù°Ñ±ê×¼Êä³öÖØ¶¨Ïòµ½Ò»¸öÎļþ¡£Òź¶µÄÊÇ£¬´ËʱÄã²»ÄÜÓÃÕâÖÖ·½·¨¶ÔÊä³öÁ÷½øÐÐÖØ¶¨Ïò¡£ÔÚÕâÀÄã²»ÒªÒÔΪexec()·½·¨µÄÐÐΪºÍshell½âÊÍÆ÷ÊÇÏàͬµÄ£¬ÊÂʵÉÏËüÃÇÊDz»Ò»ÑùµÄ¡£exec()·½·¨Ö´ÐÐÒ»¸ö¿ÉÖ´ÐгÌÐò£¨³ÌÐò»ò½Å±¾£©¡£Èç¹ûÄãÏ£Íû¶ÔÁ÷½øÐд¦Àí£¬¶ÔËü½øÐÐÖØ¶¨Ïò»òÕßͨ¹ý¹ÜµÀ£¨pipe£©ÊäË͵½ÆäËû³ÌÐò£¬Äã±ØÐëʹÓÃjava.io ³ÌÐò°ü°´ÕÕÒ»¶¨µÄ²Ù×÷˳ÐòÖ´ÐÐÕâÏîÈÎÎñ¡£³ÌÐòÇåµ¥1.6ÕýÈ·µØ°Ñjecho½ø³ÌµÄ±ê×¼Êä³öÁ÷ÖØ¶¨Ïòµ½Ò»¸öÎļþ¡£

³ÌÐòÇåµ¥1.6  GoodWinRedirect.java

ÔËÐÐGoodWinRedirect³ÌÐò²úÉúÈçÏÂÊä³ö£º

ÔËÐÐGoodWinRedirect³ÌÐòÖ®ºó£¬ÎÒÃÇ·¢ÏÖtest.txtÎļþÒѾ­´æÔÚ¡£Õâ¸öÏÝÚåµÄ½â¾ö·½°¸ÊÇͨ¹ý°ÑÍⲿ½ø³Ì±ê×¼Êä³öÁ÷µÄ´¦Àí´ÓRuntime.exec()·½·¨ÖзÖÀë³öÀ´£¬¼òµ¥µØ¶ÔÖØ¶¨Ïò½øÐд¦Àí¡£ÎÒÃÇ´´½¨Ò»¸ö¶ÀÁ¢µÄOutputStreamÁ÷£¬¶ÁÈëÎļþÃû×÷ÎªÖØ¶¨ÏòµÄÄ¿±ê£¬´ò¿ªÎļþ£¬½«ÎÒÃÇ´ÓÄǸöÑÜÉúµÄÍⲿ½ø³ÌµÄ±ê×¼Êä³öËù»ñµÃµÄÊä³öдÈëµ½Õâ¸öÎļþÖС£ÔÚ³ÌÐòÇåµ¥1.7ÖУ¬Õâ¸öÈÎÎñÊÇͨ¹ýΪÎÒÃǵÄStreamGobblerÀàÌí¼ÓÒ»¸öÐµĹ¹Ôì·½·¨ÊµÏֵġ£Õâ¸öÐµĹ¹Ôì·½·¨½ÓÊÜ3¸ö²ÎÊý£º(1)ÐèÒªÇå¿ÕµÄÊäÈëÁ÷£¬(2)Ò»¸öStringÀàÐ͵IJÎÊý£¬ÓÃÓÚ±íʾÎÒÃÇÕýÔÚÇå¿ÕµÄÁ÷£¬(3)ÊäÈëÖØ¶¨ÏòËùÖÁµÄÊä³öÁ÷¡£Õâ¸öа汾µÄStreamGobblerÀಢ²»»áÆÆ»µÒÔǰʹÓÃËüµÄ´úÂ룬ÒòΪÎÒÃDz¢Ã»ÓжÔÔ­ÓеĹ«ÓÃAPI½øÐÐÐ޸ģ¨Ö»ÊǶÔËü½øÐÐÀ©Õ¹¶øÒÑ£©¡£JavaWorldÎÄÕµÄһλ¶ÁÕßGeorge Neervoort×¢Òâµ½£¬GoodWinRedirect³ÌÐò¿ÉÒÔ×÷³öµÄÒ»¸öÖØÒª¸Ä½ø¾ÍÊÇÈ·±£Á÷ÒѾ­Íê³ÉÁË´Ó½ø³Ì¶ÁÈ¡µÄÊäÈë¡£ÕâÊDZØÒªµÄ£¬ÒòΪ½ø³ÌÓпÉÄÜÔÚÏß³ÌÍê³É֮ǰ¾Í½áÊø¡£ÏÂÃæÊÇËû¶ÔÕâ¸öÎÊÌâµÄ½â¾ö·½°¸£¨¸ÐлGeorge£©

¼ÈÈ»Runtime.exec()·½·¨µÄ²ÎÊýÈ¡¾öÓÚ²Ù×÷ϵͳ£¬ÎÒÃÇÓ¦¸ÃʹÓõÄÕýÈ·ÃüÁîÒ²Òò²Ù×÷ϵͳ¶øÒì¡£ËùÒÔ£¬ÔÚ×îÖÕÈ·¶¨Runtime.exec()·½·¨µÄ²ÎÊý֮ǰ£¬Äܹ»ÔÚ±àд´úÂëǰ¿ìËÙ²âÊÔһϲÎÊýÊǺÜÓмÛÖµµÄ¡£³ÌÐòÇåµ¥1.7ÊÇÒ»¸ö¼òµ¥µÄÃüÁîÐй¤¾ß£¬ÔÊÐíÄãÍê³ÉÕâÏ×÷¡£

³ÌÐòÇåµ¥1.7  TestExec.java

ÔËÐÐTestExec³ÌÐò£¬Æô¶¯Netscapeä¯ÀÀÆ÷²¢ÔØÈëJava°ïÖúÎĵµ£¬½«²úÉúÏÂÁÐÊä³ö£º

ÈçÉÏËùʾ£¬ÎÒÃǵĵÚ1´Î²âÊÔʧ°Ü£¬´íÎó´úÂëΪ193¡£ÔÚWin32ÖУ¬ÖµÎª193µÄ´íÎó´úÂë±íʾ¡°²»ÊÇÒ»¸öÓÐЧµÄWin32Ó¦ÓóÌÐò¡±¡£Ëü¸æËßÎÒÃÇÎÞ·¨ÕÒµ½ÄǸö¹ØÁªµÄÓ¦ÓóÌÐò£¨ÈçNetscape£©£¬Ã»ÓÐÕâ¸ö¹ØÁªµÄÓ¦ÓóÌÐò£¬½ø³ÌÎÞ·¨ÔËÐÐÒ»¸öHTMLÎļþ¡£Òò´Ë£¬ÎÒÃÇ¿ÉÒÔÔٴνøÐвâÊÔ£¬Õâ´Î¸ø³öÁËNetscapeµÄÍêÕû·¾¶£¨»òÕßÎÒÃÇ¿ÉÒÔ°ÑNetscapeÌí¼Óµ½ÎÒÃǵÄPATH»·¾³±äÁ¿ÖУ©¡£Õâ´Î£¬ÔËÐÐTestExec³ÌÐò²úÉúÈçÏÂÊä³ö£º

ÐÐÁË£¡Netscapeä¯ÀÀÆ÷Æô¶¯£¬²¢ÇÒÔØÈëÁËJava°ïÖúÎĵµ¡£

Ò»¸öÓÐÓõÄÁ·Ï°ÊǶÔTestExec³ÌÐò½øÐÐÐ޸ģ¬°Ñ±ê×¼ÊäÈëºÍ±ê×¼´íÎóÖØ¶¨Ïòµ½Ò»¸öÎļþ¡£µ±ÄãÔÚWindows95»òWindows98ÉÏÖ´ÐÐjavac±àÒë³ÌÐòʱ£¬ÕâÖÖ·½·¨¿ÉÒÔ½â¾ö´íÎóÐÅÏ¢Òç³öÓÐÏÞµÄÃüÁîÐлº³åÇøÕâ¸öÎÊÌ⡣ΪÁ˰ѱê×¼Êä³öºÍ±ê×¼´íÎó²¶×½µ½Ò»¸öÎļþÖУ¬ÏÂÃæÁгöÁËһЩ¹Ø¼üµÄ´úÂëÐУº

TestExec³ÌÐòµÄÁíÒ»¸ö¿É¹©¸Ä½øÖ®´¦ÊÇÉèÖÃÒ»¸öÃüÁîÐпª¹Ø£¬ÔÊÐí´Ó±ê×¼ÊäÈë½ÓÊÜÊäÈë¡£Õâ¸öÊäÈëËæºóʹÓÃProcess.getOutputStream()·½·¨´«µÝ¸øÄǸöÑÜÉúµÄÍⲿ³ÌÐò¡£±¾½Ú̽ÌÖÁ˺ÍʹÓÃRuntime.exec()·½·¨ÓйصöÎÊÌ⣬²¢ÌṩÁËһЩ½â¾ö·½°¸£¬Ð­ÖúÄãÖ´ÐÐÍⲿӦÓóÌÐò¡£

Item 2£ºNIOµÄЧÂʺÍÏÝÚå

NIO ³ÌÐò°üÔÚÊäÈë/Êä³ö£¨IO£©µÄЧÂÊ·½ÃæÂõ³öÁËÒ»´ó²½£¬²¢ÇÒÔö¼ÓÁËÐí¶àÐÂÌØÐÔ¡£µ«ÊÇ£¬ÕâЩÌá¸ß²¢·ÇÍêȫûÓдú¼Û£¬Ëü²»½ö½øÒ»²½Ôö¼ÓÁËIOµÄ¸´ÔÓÐÔ£¬¶øÇÒÒþ²ØÁËһЩDZÔÚµÄÏÝÚå¡£ÔÚÕâ¸öItemÖУ¬ÎÒÃǽ«Ñо¿Õâ¸öгÌÐò°üµÄһЩÓŵãºÍȱµã¡£ÔÚÑо¿¾ßÌåµÄÌØÐÔ֮ǰ£¬ÈÃÎÒÃÇÏÈÕ¾ÔڽϸߵÄÊÓµãÉÏ£¬¶ÔNIO ³ÌÐò°üÒÔ¼°ËüµÄÌØÐÔ×÷Ò»·¬ä¯ÀÀ¡£ÔÚNIO ³ÌÐò°üÖУ¬¹²ÓÐ4¸öÖ÷ÒªµÄ³éÏó¸ÅÄî¡£

ͨµÀ£¨Channel£©¡£Í¨µÀ±íʾÓëÄܹ»Ö´ÐÐIO²Ù×÷µÄʵÌåÖ®¼äµÄÒ»¸öÁ¬½Ó£¬ÕâÀàʵÌåÓÐÎļþºÍÌ×½Ó×Ö£¨socket£©µÈ¡£Í¨µÀÊǸù¾ÝËüËùÁ¬½ÓµÄʵÌåµÄÀàÐÍ·ÖÀàµÄ£¬ÈçFileChannel»òSocketChannel¡£ÎªÁËÌá¸ßIO²Ù×÷µÄËÙ¶È£¬Í¨µÀºÍ»º³åÇøÁªºÏ¹¤×÷£¬½øÐжÁÈ¡»òдÈë¡£ÓÐЩͨµÀÒÔ½Ó¿ÚµÄÐÎʽ³öÏÖ£¬·Ö±ð°çÑݲ»Í¬µÄ½ÇÉ«£¬ÈçGatheringByteChannel»òScatteringByteChannel£¬ËüÃÇ¿ÉÒÔ´Ó¶àÖÖÐòÁеĻº³åÇø½øÐжÁÈ¡»òдÈë¡£×îºó£¬Äã¿ÉÒÔͨ¹ýFileInputStream¡¢FileOutputStream¡¢ServerSocket¡¢SocketºÍRandomAccessFileÀà»ñȡһ¸öͨµÀ¡£Òź¶µÄÊÇ£¬ÔÚÒѾ­Ê®·ÖÓµ¼·µÄIOÁìÓò£¨stream¡¢pipe¡¢reader¡¢writer£©ÀïÔÙÌí¼ÓÕâЩиÅÄ¶Ô¾ø´ó¶àÊý³ÌÐòÔ±¶øÑÔÊǼ«ÈÝÒ×ÒýÆð»ìÏýµÄ¡£Í¬Ê±£¬ÕâЩ¸ÅÄîÏ໥֮¼ä´æÔÚÖØµþ£¬ËüÃǵÄAPIÖ®¼äÒ²»á»¥ÏàÓ°Ïì¡£×ÜÖ®£¬ÎªÊýÖÚ¶àµÄIOÀàËùµ¼Öµĸ´ÔÓÐÔÒÔ¼°ËüÃÇÔÚ¹¦ÄÜÉϵÄÖØµþ£¬ÊÇÕâ¸öÁìÓò×î´óµÄÒ»¸öÏÝÚå¡£

»º³åÇø£¨Buffer£©¡£»º³åÇøÊÇÒ»ÖÖ·ºÐÍÊý¾ÝÈÝÆ÷£¬Ëü¿ÉÒÔ¶Ôµ¥ÖÖÊý¾ÝÀàÐ͵ÄËæ»ú·ÃÎʽøÐвÙ×Ý¡£ËüÃÇÓëCharset»òChannelÀ༯³ÉÔÚÒ»Æð¡£Ã¿¸ö»º³åÇø°üÀ¨Ò»¸ö±êÖ¾£¨mark£©¡¢Î»Öã¨position£©¡¢ÏÞÖÆ£¨limit£©ºÍÈÝÁ¿£¨capacity£©Öµ£¨ÒÔ¼°ÓÃÓÚ²Ù×ݵĶÔÓ¦·½·¨£©¡£ÆäÖÐλÖÿÉÒÔÉèÖÃΪ»º³åÇøÖеÄÈκεص㡣»º³åÇø¸ù¾Ýģʽȷ¶¨ËüµÄ¹¤×÷·½Ê½£¨¶ÁÈ¡»òдÈ룩£¬Èç¹ûÎÒÃÇÐèÒªÐ޸Ļº³åÇøµÄ¹¤×÷·½Ê½£¬±ØÐë¶ÔÕâ¸öģʽ½øÐС°·­×ª¡±¡£

×Ö·û¼¯£¨Charset£©¡£×Ö·û¼¯¾ÍÊÇ×Ö½ÚºÍ16λµÄUnicode×Ö·ûÖ®¼äµÄÃû³ÆÓ³Éä¡£ÕâЩ×Ö·û¼¯µÄÃû×ÖÔÚIANA×Ö·û¼¯×¢²á±í£¨http£º//www.iana.org/assignments/character-sets£©ÖÐÁгö¡£

Ñ¡ÔñÆ÷£¨Selector£©¡£SelectorÀàÓÃÓÚ½«Ò»¸öSelectableChannel¶ÔÏó¶à·»¯£¨multiplex£©¡£SelectableChannelÖ»ÓÐÒ»¸ö×ÓÀ࣬³ÆÎªAbstractSelectableChannel¡£AbstractSelectableChannelÀàÓÐ5¸öÖ±½ÓµÄ×ÓÀࣺDatagramChannel¡¢Pipe.SinkChannel¡¢Pipe.SourceChannel¡¢ServerSocketChannelºÍSocketChannel¡£ÔÚÍøÂçͨÐÅÖУ¬¶à·Æ÷£¨multiplexer£©¾ÍÊÇÒ»ÖÖÄܹ»ÔÚÒ»ÌõÏß·ÉÏ·¢Ëͼ¸¸öÐźŵÄÉ豸¡£SelectorÀà¹ÜÀíÒ»×é°üÀ¨Ò»¸ö»ò¶à¸ö¡°¿ÉÑ¡Ôñ¡±µÄͨµÀ£¬²¢Ìṩµ¥¸ö·ÃÎʵã´ÓÕâЩͨµÀÖеÄÈκÎÒ»¸ö½øÐÐÊäÈë¡£

±í2.1ÁгöÁËNIO ³ÌÐò°üÖÐËùÓйؼüµÄÀàºÍ½Ó¿Ú¡£

±í2.1                                               ¹Ø¼üµÄNIOÀàºÍ½Ó¿Ú

³Ì Ðò °ü

Àà/½Ó¿Ú

Ãè     Êö

java.nio

Buffer

ÓÃÓÚÁÙʱÊý¾Ý´æ´¢ºÍ²Ù×ݵÄËæ»ú·ÃÎÊÊý¾ÝÈÝÆ÷

java.nio

ByteBuffer£¬

CharBuffer£¬

DoubleBuffer£¬

FloatBuffer£¬

IntBuffer£¬

LongBuffer£¬

ShortBuffer

´æ´¢Ìض¨Êý¾ÝÀàÐ͵Ļº³åÇø£¬ËüµÄÃû×ÖÌáʾÁËËüËù´æ´¢µÄÊý¾ÝÀàÐÍ

java.nio

MappedByteBuffer

ByteBufferµÄÒ»ÖÖ£¬ËüµÄÄÚÈÝÊÇÒ»¸öÎļþµÄÄÚ´æÓ³ÉäÇøÓò¡£ËüÊÇͨ¹ýFileChannel.map()·½·¨´´½¨µÄ

java.nio

ByteOrder

Ò»ÖÖÀàÐͰ²È«µÄ×Ö½Ú˳Ðòö¾Ù£ºLITTLE_ENDIAN»òBIG_ENDIAN

java.nio.channels

Channel

Õâ¸ö½Ó¿Ú±íʾһ¸ö´ò¿ª»ò¹Ø±ÕµÄÓëIOÉ豸µÄÁ¬½Ó

java.nio.channels

Channels

Õâ¸öÀà°üº¬ÁËһЩÓëͨµÀ²Ù×÷ÓйصÄʵÓ÷½·¨

java.nio.channels

FileChannel£¬ Pipe£¬

DatagramChannel£¬

SocketChannel£¬

ServerSocketChannel £¬

SelectableChannel

±íʾ¾ßÌåµÄͨµÀÀàÐÍ£¬·Ö±ðÓëÌØ¶¨µÄÉ豸һÆð¹¤×÷£¬ÈçÎļþºÍÌ×½Ó×Ö¡£DatagramChannelÊÇÒ»ÖÖÓëDatagramSockets£¨Ê¹ÓÃÓû§Êý¾Ý±¨Ð­Òé¼´UDP£©Ò»Æð¹¤×÷µÄͨµÀ¡£¹ÜµÀÓÃÓÚÖ´ÐÐÏß³ÌÖ®¼äµÄͨÐÅ

java.nio.channels

FileLock

Õâ¸öÀà±íʾһ¸öÎļþij¸öÇøÓòµÄÒ»¸öËø¡£ÕâÖÖÀàÐ͵ĶÔÏó¿ÉÒÔͨ¹ýFileChannelÀàµÄlock()»òtryLock()·½·¨´´½¨

java.nio.channels

Selector£¬

SelectionKey

ÈçǰËùÊö£¬SelectorÊÇÒ»¸öÀ࣬ËüÓÃÓÚ½«Ò»¸ö»ò¶à¸öSelectableChannels¶ÔÏó¶à·»¯¡£SelectionKeyÓÃÓÚÔÚ¼àÌý£¨»òÑ¡Ôñ£©Ò»¸öÌØ¶¨µÄSelectableChannel¶ÔÏóʱָ¶¨Ò»Ð©¾ßÌåµÄ²Ù×÷

java.nio.charset

Charset

ÕâÊǸö³éÏóÀ࣬ËüÌṩÁË16λµÄUnicode×Ö½ÚºÍ×Ö·ûÐòÁÐÖ®¼äµÄÓ³Éä¡£±ê×¼×Ö·û¼¯ÊÇUS-ASCII£¨7λµÄASCII£©¡¢ISO£­8859£­1£¨ISO¡¡Latin£©¡¢UTF£­8¡¢UTF£­16BE£¨Ê¹ÓÃBIG_ENDIAN£©¡¢UTF£­16LE£¨Ê¹ÓÃLITTLE_ENDIAN£©¡¢UTF£­16£¨Ê¹ÓÃÒ»¸ö×Ö½Ú˳Ðò±êÖ¾£©

java.nio.charset

CharsetEncoder£¬

CharsetDecoder

CharsetEncoderÊÇÒ»¸öÒýÇæ£¬Ëü°ÑÒ»×é16λµÄUnicode×Ö·û±àÂ루»òת»»£©ÎªÒ»¸ö¾ßÌåµÄÓɾßÌå×Ö·û¼¯Ö¸¶¨µÄ×Ö½ÚÐòÁС£CharsetDecoderÖ´ÐÐÏà·´µÄ²Ù×÷

Ðø±í 

³Ì Ðò °ü

Àà/½Ó¿Ú

Ãè     Êö

java.nio.charset

CoderResult

Õâ¸öÀ౨¸æÒ»¸ö±àÂëÆ÷»ò½âÂëÆ÷µÄ״̬¡£±¨¸æÏÂÃæ5ÖÖ״̬֮һ£º´íÎó¡¢ÐÎʽ´íÎó¡¢ÏÂÒç¡¢ÉÏÒçºÍÎÞ·¨Ó³Éä

java.nio.charset

CodingActionError

Õâ¸öÀàÊÇÒ»¸öÀàÐͰ²È«µÄö¾Ù£¬ÓÃÓÚÖ¸¶¨±àÂëÆ÷»ò½âÂëÆ÷Ó¦¸ÃÈçºÎ´¦Àí´íÎó¡£Ëü¿ÉÒÔ±»ÉèÖÃΪIGNORE¡¢REPLACE»òREPORT

 

Òź¶µÄÊÇ£¬ÎÒÃÇÎÞ·¨Õ¹Ê¾NIO ³ÌÐò°üµÄËùÓй¦ÄÜ¡£Õâ¶ù£¬ÎÒÃǽöÑо¿3¸öÀý×Ó£ºÒ»¸ö¹æ·¶µÄÎļþ¸´ÖÆ¡¢Ð¡¶Ë˳Ðò×Ö½Ú²Ù×÷ºÍ·Ç×èÈûÐÔ·þÎñÆ÷IO¡£

¹æ·¶µÄÎļþ¸´ÖÆ

ÎÒÃǵĵÚ1¸öÀý×ÓÊÇÒ»¸ö¹æ·¶µÄÎļþ¸´ÖƲÙ×÷¡£ÊµÏÖÕâÀà¸´ÖÆµÄÀÏ·½·¨ÊÇÉèÖÃÒ»¸öÑ­»·£¬²»¶ÏµØÔÚÒ»¸ö³¤¶È¹Ì¶¨µÄ×Ö½Ú»º³åÇøÖнøÐжÁÈ¡ºÍдÈ룬ֱÖÁºÄ¾¡ÎļþÖеÄËùÓÐ×Ö½Ú¡£³ÌÐòÇåµ¥2.1չʾÁËÕâ¸ö·½·¨¡£

³ÌÐòÇåµ¥2.1¡¡SlowFileCopy.java

ÔÚ³ÌÐòÇåµ¥2.1µÄµÚ26ÐУ¬ÎÒÃǰѻº³åÇøµÄ³¤¶ÈÉèÖÃΪ4KB¡£ÏÔÈ»£¬¸ù¾Ý¼òµ¥µÄ¿Õ¼ä/ʱ¼äµÄȨºâ£¬¶ÔÓÚ´óÐÍÎļþ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÀ©´ó»º³åÇøµÄ³¤¶ÈÀ´Ìá¸ßËÙ¶È¡£ÔÚÒ»¸ö27MBµÄÎļþÉÏÔËÐгÌÐòÇåµ¥2.1²úÉúÏÂÃæµÄ½á¹û£º

³ÌÐòÇåµ¥2.1µÄµÚ30ºÍ31ÐÐÊdzÌÐòÖÐÑ­»·µÄ¹Ø¼