




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
外文原文11THEJAVAI/OSYSTEMCREATINGAGOODINPUT/OUTPUTI/OSYSTEMISONEOFTHEMOREDIFFICULTTASKSFORTHELANGUAGEDESIGNERTHISISEVIDENCEDBYTHENUMBEROFDIFFERENTAPPROACHESTHECHALLENGESEEMSTOBEINCOVERINGALLEVENTUALITIESNOTONLYARETHEREDIFFERENTSOURCESANDSINKSOFI/OTHATYOUWANTTOCOMMUNICATEWITHFILES,THECONSOLE,NETWORKCONNECTIONS,BUTYOUNEEDTOTALKTOTHEMINAWIDEVARIETYOFWAYSSEQUENTIAL,RANDOMACCESS,BUFFERED,BINARY,CHARACTER,BYLINES,BYWORDS,ETCTHEJAVALIBRARYDESIGNERSATTACKEDTHISPROBLEMBYCREATINGLOTSOFCLASSESINFACT,THEREARESOMANYCLASSESFORJAVASI/OSYSTEMTHATITCANBEINTIMIDATINGATFIRSTIRONICALLY,THEJAVAI/ODESIGNACTUALLYPREVENTSANEXPLOSIONOFCLASSESTHEREWASALSOASIGNIFICANTCHANGEINTHEI/OLIBRARYAFTERJAVA10,WHENTHEORIGINALBYTEORIENTEDLIBRARYWASSUPPLEMENTEDWITHCHARORIENTED,UNICODEBASEDI/OCLASSESASARESULTTHEREAREAFAIRNUMBEROFCLASSESTOLEARNBEFOREYOUUNDERSTANDENOUGHOFJAVASI/OPICTURETHATYOUCANUSEITPROPERLYINADDITION,ITSRATHERIMPORTANTTOUNDERSTANDTHEEVOLUTIONHISTORYOFTHEI/OLIBRARY,EVENIFYOURFIRSTREACTIONIS“DONTBOTHERMEWITHHISTORY,JUSTSHOWMEHOWTOUSEIT”THEPROBLEMISTHATWITHOUTTHEHISTORICALPERSPECTIVEYOUWILLRAPIDLYBECOMECONFUSEDWITHSOMEOFTHECLASSESANDWHENYOUSHOULDANDSHOULDNTUSETHEMTHISCHAPTERWILLGIVEYOUANINTRODUCTIONTOTHEVARIETYOFI/OCLASSESINTHESTANDARDJAVALIBRARYANDHOWTOUSETHEMTYPESOFINPUTSTREAMINPUTSTREAMSJOBISTOREPRESENTCLASSESTHATPRODUCEINPUTFROMDIFFERENTSOURCESTHESESOURCESCANBE1ANARRAYOFBYTES2ASTRINGOBJECT3AFILE4A“PIPE,”WHICHWORKSLIKEAPHYSICALEACHOFTHESEHASANASSOCIATEDSUBCLASSOFINPUTSTREAMINADDITION,THEFILTERINPUTSTREAMISALSOATYPEOFINPUTSTREAM,TOPROVIDEABASECLASSFOR“DECORATOR“CLASSESTHATATTACHATTRIBUTESORUSEFULINTERFACESTOINPUTSTREAMSTHISISDISCUSSEDLATERTABLE111TYPESOFINPUTSTREAMTYPESOFOUTPUTSTREAMTHISCATEGORYINCLUDESTHECLASSESTHATDECIDEWHEREYOUROUTPUTWILLGOANARRAYOFBYTESNOSTRING,HOWEVERPRESUMABLYYOUCANCREATEONEUSINGTHEARRAYOFBYTES,AFILE,ORA“PIPE”INADDITION,THEFILTEROUTPUTSTREAMPROVIDESABASECLASSFOR“DECORATOR“CLASSESTHATATTACHATTRIBUTESORUSEFULINTERFACESTOOUTPUTSTREAMSTHISISDISCUSSEDLATERTABLE112TYPESOFOUTPUTSTREAMADDINGATTRIBUTESANDUSEFULINTERFACESTHEUSEOFLAYEREDOBJECTSTODYNAMICALLYANDTRANSPARENTLYADDRESPONSIBILITIESTOINDIVIDUALOBJECTSISREFERREDTOASTHEDECORATORPATTERNPATTERNS57ARETHESUBJECTOFTHINKINGINPATTERNSWITHJAVA,DOWNLOADABLEATWWWBRUCEECKELCOMTHEDECORATORPATTERNSPECIFIESTHATALLOBJECTSTHATWRAPAROUNDYOURINITIALOBJECTHAVETHESAMEINTERFACETHISMAKESTHEBASICUSEOFTHEDECORATORSTRANSPARENTYOUSENDTHESAMEMESSAGETOANOBJECTWHETHERITSBEENDECORATEDORNOTTHISISTHEREASONFORTHEEXISTENCEOFTHE“FILTER”CLASSESINTHEJAVAI/OLIBRARYTHEABSTRACT“FILTER”CLASSISTHEBASECLASSFORALLTHEDECORATORSADECORATORMUSTHAVETHESAMEINTERFACEASTHEOBJECTITDECORATES,BUTTHEDECORATORCANALSOEXTENDTHEINTERFACE,WHICHOCCURSINSEVERALOFTHE“FILTER”CLASSESDECORATORSAREOFTENUSEDWHENSIMPLESUBCLASSINGRESULTSINALARGENUMBEROFSUBCLASSESINORDERTOSATISFYEVERYPOSSIBLECOMBINATIONTHATISNEEDEDSOMANYSUBCLASSESTHATITBECOMESIMPRACTICALTHEJAVAI/OLIBRARYREQUIRESMANYDIFFERENTCOMBINATIONSOFFEATURES,WHICHISWHYTHEDECORATORPATTERNISUSEDTHEREISADRAWBACKTOTHEDECORATORPATTERN,HOWEVERDECORATORSGIVEYOUMUCHMOREFLEXIBILITYWHILEYOUREWRITINGAPROGRAMSINCEYOUCANEASILYMIXANDMATCHATTRIBUTES,BUTTHEYADDCOMPLEXITYTOYOURCODETHEREASONTHATTHEJAVAI/OLIBRARYISAWKWARDTOUSEISTHATYOUMUSTCREATEMANYCLASSESTHE“CORE”I/OTYPEPLUSALLTHEDECORATORSINORDERTOGETTHESINGLEI/OOBJECTTHATYOUWANTTHECLASSESTHATPROVIDETHEDECORATORINTERFACETOCONTROLAPARTICULARINPUTSTREAMOROUTPUTSTREAMARETHEFILTERINPUTSTREAMANDFILTEROUTPUTSTREAMWHICHDONTHAVEVERYINTUITIVENAMESFILTERINPUTSTREAMANDFILTEROUTPUTSTREAMAREABSTRACTCLASSESTHATAREDERIVEDFROMTHEBASECLASSESOFTHEI/OLIBRARY,INPUTSTREAMANDOUTPUTSTREAM,WHICHISTHEKEYREQUIREMENTOFTHEDECORATORSOTHATITPROVIDESTHECOMMONINTERFACETOALLTHEOBJECTSTHATAREBEINGDECORATEDREADINGFROMANINPUTSTREAMWITHFILTERINPUTSTREAMTHEFILTERINPUTSTREAMCLASSESACCOMPLISHTWOSIGNIFICANTLYDIFFERENTTHINGSDATAINPUTSTREAMALLOWSYOUTOREADDIFFERENTTYPESOFPRIMITIVEDATAASWELLASSTRINGOBJECTSALLTHEMETHODSSTARTWITH“READ,”SUCHASREADBYTE,READFLOAT,ETCTHIS,ALONGWITHITSCOMPANIONDATAOUTPUTSTREAM,ALLOWSYOUTOMOVEPRIMITIVEDATAFROMONEPLACETOANOTHERVIAASTREAMTHESE“PLACES”AREDETERMINEDBYTHECLASSESINTABLE111THEREMAININGCLASSESMODIFYTHEWAYANINPUTSTREAMBEHAVESINTERNALLYWHETHERITSBUFFEREDORUNBUFFERED,IFITKEEPSTRACKOFTHELINESITSREADINGALLOWINGYOUTOASKFORLINENUMBERSORSETTHELINENUMBER,ANDWHETHERYOUCANPUSHBACKASINGLECHARACTERTHELASTTWOCLASSESLOOKALOTLIKESUPPORTFORBUILDINGACOMPILERTHATIS,THEYWEREADDEDTOSUPPORTTHECONSTRUCTIONOFTHEJAVACOMPILER,SOYOUPROBABLYWONTUSETHEMINGENERALPROGRAMMINGYOULLPROBABLYNEEDTOBUFFERYOURINPUTALMOSTEVERYTIME,REGARDLESSOFTHEI/ODEVICEYOURECONNECTINGTO,SOITWOULDHAVEMADEMORESENSEFORTHEI/OLIBRARYTOMAKEASPECIALCASEORSIMPLYAMETHODCALLFORUNBUFFEREDINPUTRATHERTHANBUFFEREDINPUTTABLE113TYPESOFFILTERINPUTSTREAMWRITINGTOANOUTPUTSTREAMWITHFILTEROUTPUTSTREAMTHECOMPLEMENTTODATAINPUTSTREAMISDATAOUTPUTSTREAM,WHICHFORMATSEACHOFTHEPRIMITIVETYPESANDSTRINGOBJECTSONTOASTREAMINSUCHAWAYTHATANYDATAINPUTSTREAM,ONANYMACHINE,CANREADTHEMALLTHEMETHODSSTARTWITH“WRITE,”SUCHASWRITEBYTE,WRITEFLOAT,ETCTHEORIGINALINTENTOFPRINTSTREAMWASTOPRINTALLOFTHEPRIMITIVEDATATYPESANDSTRINGOBJECTSINAVIEWABLEFORMATTHISISDIFFERENTFROMDATAOUTPUTSTREAM,WHOSEGOALISTOPUTDATAELEMENTSONASTREAMINAWAYTHATDATAINPUTSTREAMCANPORTABLYRECONSTRUCTTHEMTHETWOIMPORTANTMETHODSINPRINTSTREAMAREPRINTANDPRINTLN,WHICHAREOVERLOADEDTOPRINTALLTHEVARIOUSTYPESTHEDIFFERENCEBETWEENPRINTANDPRINTLNISTHATTHELATTERADDSANEWLINEWHENITSDONEBUFFEREDOUTPUTSTREAMISAMODIFIERANDTELLSTHESTREAMTOUSEBUFFERINGSOYOUDONTGETAPHYSICALWRITEEVERYTIMEYOUWRITETOTHESTREAMYOULLPROBABLYALWAYSWANTTOUSETHISWITHFILES,ANDPOSSIBLYCONSOLEI/OTABLE114TYPESOFFILTEROUTPUTSTREAMTYPICALUSESOFI/OSTREAMSALTHOUGHYOUCANCOMBINETHEI/OSTREAMCLASSESINMANYDIFFERENTWAYS,YOULLPROBABLYJUSTUSEAFEWCOMBINATIONSTHEFOLLOWINGEXAMPLECANBEUSEDASABASICREFERENCEITSHOWSTHECREATIONANDUSEOFTYPICALI/OCONFIGURATIONSNOTETHATEACHCONFIGURATIONBEGINSWITHACOMMENTEDNUMBERANDTITLETHATCORRESPONDSTOTHEHEADINGFORTHEAPPROPRIATEEXPLANATIONTHATFOLLOWSINTHETEXTINPUTSTREAMSPARTS1THROUGH4DEMONSTRATETHECREATIONANDUSEOFINPUTSTREAMSPART4ALSOSHOWSTHESIMPLEUSEOFANOUTPUTSTREAM1BUFFEREDINPUTFILETOOPENAFILEFORCHARACTERINPUT,YOUUSEAFILEINPUTREADERWITHASTRINGORAFILEOBJECTASTHEFILENAMEFORSPEED,YOULLWANTTHATFILETOBEBUFFEREDSOYOUGIVETHERESULTINGREFERENCETOTHECONSTRUCTORFORABUFFEREDREADERSINCEBUFFEREDREADERALSOPROVIDESTHEREADLINEMETHOD,THISISYOURFINALOBJECTANDTHEINTERFACEYOUREADFROMWHENYOUREACHTHEENDOFTHEFILE,READLINERETURNSNULLSOTHATISUSEDTOBREAKOUTOFTHEWHILELOOPTHESTRINGS2ISUSEDTOACCUMULATETHEENTIRECONTENTSOFTHEFILEINCLUDINGNEWLINESTHATMUSTBEADDEDSINCEREADLINESTRIPSTHEMOFFS2ISTHENUSEDINTHELATERPORTIONSOFTHISPROGRAMFINALLY,CLOSEISCALLEDTOCLOSETHEFILETECHNICALLY,CLOSEWILLBECALLEDWHENFINALIZERUNS,ANDTHISISSUPPOSEDTOHAPPENWHETHERORNOTGARBAGECOLLECTIONOCCURSASTHEPROGRAMEXITSHOWEVER,THISHASBEENINCONSISTENTLYIMPLEMENTED,SOTHEONLYSAFEAPPROACHISTOEXPLICITLYCALLCLOSEFORFILES2INPUTFROMMEMORYTHISSECTIONTAKESTHESTRINGS2THATNOWCONTAINSTHEENTIRECONTENTSOFTHEFILEANDUSESITTOCREATEASTRINGREADERTHENREADISUSEDTOREADEACHCHARACTERONEATATIMEANDSENDITOUTTOTHECONSOLENOTETHATREADRETURNSTHENEXTBYTEASANINTANDTHUSITMUSTBECASTTOACHARTOPRINTPROPERLY3FORMATTEDMEMORYINPUTIFYOUREADTHECHARACTERSFROMADATAINPUTSTREAMONEBYTEATATIMEUSINGREADBYTE,ANYBYTEVALUEISALEGITIMATERESULTSOTHERETURNVALUECANNOTBEUSEDTODETECTTHEENDOFINPUTINSTEAD,YOUCANUSETHEAVAILABLEMETHODTOFINDOUTHOWMANYMORECHARACTERSAREAVAILABLEHERESANEXAMPLETHATSHOWSHOWTOREADAFILEONEBYTEATATIME/C11TESTEOFJAVA/TESTINGFORTHEENDOFFILE/WHILEREADINGABYTEATATIMEIMPORTJAVAIOPUBLICCLASSTESTEOF/THROWEXCEPTIONSTOCONSOLEPUBLICSTATICVOIDMAINSTRINGARGSTHROWSIOEXCEPTIONDATAINPUTSTREAMINNEWDATAINPUTSTREAMNEWBUFFEREDINPUTSTREAMNEWFILEINPUTSTREAM“TESTEOFJAVA“WHILEINAVAILABLE0SYSTEMOUTPRINTCHARINREADBYTE/NOTETHATAVAILABLEWORKSDIFFERENTLYDEPENDINGONWHATSORTOFMEDIUMYOUREREADINGFROMITSLITERALLY“THENUMBEROFBYTESTHATCANBEREADWITHOUTBLOCKING”WITHAFILETHISMEANSTHEWHOLEFILE,BUTWITHADIFFERENTKINDOFSTREAMTHISMIGHTNOTBETRUE,SOUSEITTHOUGHTFULLYYOUCOULDALSODETECTTHEENDOFINPUTINCASESLIKETHESEBYCATCHINGANEXCEPTIONHOWEVER,THEUSEOFEXCEPTIONSFORCONTROLFLOWISCONSIDEREDAMISUSEOFTHATFEATURE4FILEOUTPUTTHISEXAMPLEALSOSHOWSHOWTOWRITEDATATOAFILEFIRST,AFILEWRITERISCREATEDTOCONNECTTOTHEFILEYOULLVIRTUALLYALWAYSWANTTOBUFFERTHEOUTPUTBYWRAPPINGITINABUFFEREDWRITERTRYREMOVINGTHISWRAPPINGTOSEETHEIMPACTONTHEPERFORMANCEBUFFERINGTENDSTODRAMATICALLYINCREASEPERFORMANCEOFI/OOPERATIONSTHENFORTHEFORMATTINGITSTURNEDINTOAPRINTWRITERTHEDATAFILECREATEDTHISWAYISREADABLEASANORDINARYTEXTFILEASTHELINESAREWRITTENTOTHEFILE,LINENUMBERSAREADDEDNOTETHATLINENUMBERINPUTSTREAMISNOTUSED,BECAUSEITSASILLYCLASSANDYOUDONTNEEDITASSHOWNHERE,ITSTRIVIALTOKEEPTRACKOFYOUROWNLINENUMBERSWHENTHEINPUTSTREAMISEXHAUSTED,READLINERETURNSNULLYOULLSEEANEXPLICITCLOSEFOROUT1,BECAUSEIFYOUDONTCALLCLOSEFORALLYOUROUTPUTFILES,YOUMIGHTDISCOVERTHATTHEBUFFERSDONTGETFLUSHEDSOTHEYREINCOMPLETEOUTPUTSTREAMSTHETWOPRIMARYKINDSOFOUTPUTSTREAMSARESEPARATEDBYTHEWAYTHEYWRITEDATAONEWRITESITFORHUMANCONSUMPTION,ANDTHEOTHERWRITESITTOBEREACQUIREDBYADATAINPUTSTREAMTHERANDOMACCESSFILESTANDSALONE,ALTHOUGHITSDATAFORMATISCOMPATIBLEWITHTHEDATAINPUTSTREAMANDDATAOUTPUTSTREAM5STORINGANDRECOVERINGDATAAPRINTWRITERFORMATSDATASOITSREADABLEBYAHUMANHOWEVER,TOOUTPUTDATASOTHATITCANBERECOVEREDBYANOTHERSTREAM,YOUUSEADATAOUTPUTSTREAMTOWRITETHEDATAANDADATAINPUTSTREAMTORECOVERTHEDATAOFCOURSE,THESESTREAMSCOULDBEANYTHING,BUTHEREAFILEISUSED,BUFFEREDFORBOTHREADINGANDWRITINGTHEWRITEDOUBLESTORESTHEDOUBLENUMBERTOTHESTREAMANDTHECOMPLEMENTARYREADDOUBLERECOVERSITTHEREARESIMILARMETHODSFORREADINGANDWRITINGTHEOTHERTYPESBUTFORANYOFTHEREADINGMETHODSTOWORKCORRECTLY,YOUMUSTKNOWTHEEXACTPLACEMENTOFTHEDATAITEMINTHESTREAM,SINCEITWOULDBEEQUALLYPOSSIBLETOREADTHESTOREDDOUBLEASASIMPLESEQUENCEOFBYTES,ORASACHAR,ETCSOYOUMUSTEITHERHAVEAFIXEDFORMATFORTHEDATAINTHEFILEOREXTRAINFORMATIONMUSTBESTOREDINTHEFILETHATYOUPARSETODETERMINEWHERETHEDATAISLOCATEDNOTETHATOBJECTSERIALIZATIONDESCRIBEDLATERINTHISCHAPTERMAYBEANEASIERWAYTOSTOREANDRETRIEVECOMPLEXDATASTRUCTURES6READINGANDWRITINGRANDOMACCESSFILESASPREVIOUSLYNOTED,THERANDOMACCESSFILEISALMOSTTOTALLYISOLATEDFROMTHERESTOFTHEI/OHIERARCHY,SAVEFORTHEFACTTHATITIMPLEMENTSTHEDATAINPUTANDDATAOUTPUTINTERFACESSOYOUCANNOTCOMBINEITWITHANYOFTHEASPECTSOFTHEINPUTSTREAMANDOUTPUTSTREAMSUBCLASSESEVENTHOUGHITMIGHTMAKESENSETOTREATABYTEARRAYINPUTSTREAMASARANDOMACCESSELEMENT,YOUCANUSERANDOMACCESSFILETOONLYOPENAFILEYOUMUSTASSUMEARANDOMACCESSFILEISPROPERLYBUFFEREDSINCEYOUCANNOTADDTHATTHEONEOPTIONYOUHAVEISINTHESECONDCONSTRUCTORARGUMENTYOUCANOPENARANDOMACCESSFILETOREAD“R”ORREADANDWRITE“RW”USINGARANDOMACCESSFILEISLIKEUSINGACOMBINEDDATAINPUTSTREAMANDDATAOUTPUTSTREAMBECAUSEITIMPLEMENTSTHEEQUIVALENTINTERFACESINADDITION,YOUCANSEETHATSEEKISUSEDTOMOVEABOUTINTHEFILEANDCHANGEONEOFTHEVALUESPIPEDSTREAMSTHEPIPEDINPUTSTREAM,PIPEDOUTPUTSTREAM,PIPEDREADERANDPIPEDWRITERHAVEBEENMENTIONEDONLYBRIEFLYINTHISCHAPTERTHISISNOTTOSUGGESTTHATTHEYARENTUSEFUL,BUTTHEIRVALUEISNOTAPPARENTUNTILYOUBEGINTOUNDERSTANDMULTITHREADING,SINCETHEPIPEDSTREAMSAREUSEDTOCOMMUNICATEBETWEENTHREADSTHISISCOVEREDALONGWITHANEXAMPLEINCHAPTER14THEREASONFORTHEEXCEPTIONSPECIFICATIONISTHATREADLINECANTHROWANIOEXCEPTIONNOTETHATSYSTEMINSHOULDUSUALLYBEBUFFERED,ASWITHMOSTSTREAMSREDIRECTINGSTANDARDI/OTHEJAVASYSTEMCLASSALLOWSYOUTOREDIRECTTHESTANDARDINPUT,OUTPUT,ANDERRORI/OSTREAMSUSINGSIMPLESTATICMETHODCALLSSETININPUTSTREAMSETOUTPRINTSTREAMSETERRPRINTSTREAMREDIRECTINGOUTPUTISESPECIALLYUSEFULIFYOUSUDDENLYSTARTCREATINGALARGEAMOUNTOFOUTPUTONYOURSCREENANDITSSCROLLINGPASTFASTERTHANYOUCANREADIT59REDIRECTINGINPUTISVALUABLEFORACOMMANDLINEPROGRAMINWHICHYOUWANTTOTESTAPARTICULARUSERINPUTSEQUENCEREPEATEDLYHERESASIMPLEEXAMPLETHATSHOWSTHEUSEOFTHESEMETHODS/C11REDIRECTINGJAVA/DEMONSTRATESSTANDARDI/OREDIRECTIONIMPORTJAVAIOPUBLICCLASSREDIRECTING/THROWEXCEPTIONSTOCONSOLEPUBLICSTATICVOIDMAINSTRINGARGSTHROWSIOEXCEPTIONBUFFEREDINPUTSTREAMINNEWBUFFEREDINPUTSTREAMNEWFILEINPUTSTREAM“REDIRECTINGJAVA“PRINTSTREAMOUTNEWPRINTSTREAMNEWBUFFEREDOUTPUTSTREAMNEWFILEOUTPUTSTREAM“TESTOUT“SYSTEMSETININSYSTEMSETOUTOUTSYSTEMSETERROUTBUFFEREDREADERBRNEWBUFFEREDREADERNEWINPUTSTREAMREADERSYSTEMINSTRINGSWHILESBRREADLINENULLSYSTEMOUTPRINTLNSOUTCLOSE/REMEMBERTHIS/THISPROGRAMATTACHESSTANDARDINPUTTOAFILE,ANDREDIRECTSSTANDARDOUTPUTANDSTANDARDERRORTOANOTHERFILECOMPRESSIONTHEJAVAI/OLIBRARYCONTAINSCLASSESTOSUPPORTREADINGANDWRITINGSTREAMSINACOMPRESSEDFORMATTHESEAREWRAPPEDAROUNDEXISTINGI/OCLASSESTOPROVIDECOMPRESSIONFUNCTIONALITYTHESECLASSESARENOTDERIVEDFROMTHEREADERANDWRITERCLASSES,BUTINSTEADAREPARTOFTHEINPUTSTREAMANDOUTPUTSTREAMHIERARCHIESTHISISBECAUSETHECOMPRESSIONLIBRARYWORKSWITHBYTES,NOTCHARACTERSHOWEVER,YOUMIGHTSOMETIMESBEFORCEDTOMIXTHETWOTYPESOFSTREAMSREMEMBERTHATYOUCANUSEINPUTSTREAMREADERANDOUTPUTSTREAMWRITERTOPROVIDEEASYCONVERSIONBETWEENONETYPEANDANOTHERALTHOUGHTHEREAREMANYCOMPRESSIONALGORITHMS,ZIPANDGZIPAREPOSSIBLYTHEMOSTCOMMONLYUSEDTHUSYOUCANEASILYMANIPULATEYOURCOMPRESSEDDATAWITHTHEMANYTOOLSAVAILABLEFORREADINGANDWRITINGTHESEFORMATSSIMPLECOMPRESSIONWITHGZIPTHEGZIPINTERFACEISSIMPLEANDTHUSISPROBABLYMOREAPPROPRIATEWHENYOUHAVEASINGLESTREAMOFDATATHATYOUWANTTOCOMPRESSRATHERTHANACONTAINEROFDISSIMILARPIECESOFDATAHERESANEXAMPLETHATCOMPRESSESASINGLEFILE/C11GZIPCOMPRESSJAVA/USESGZIPCOMPRESSIONTOCOMPRESSAFILE/WHOSENAMEISPASSEDONTHECOMMANDLINEIMPORTJAVAIOIMPORTJAVAUTILZIPPUBLICCLASSGZIPCOMPRESS/THROWEXCEPTIONSTOCONSOLEPUBLICSTATICVOIDMAINSTRINGARGSTHROWSIOEXCEPTIONBUFFEREDREADERINNEWBUFFEREDREADERNEWFILEREADERARGS0BUFFEREDOUTPUTSTREAMOUTNEWBUFFEREDOUTPUTSTREAMNEWGZIPOUTPUTSTREAMNEWFILEOUTPUTSTREAM“TESTGZ“SYSTEMOUTPRINTLN“WRITINGFILE“INTCWHILECINREAD1OUTWRITECINCLOSEOUTCLOSESYSTEMOUTPRINTLN“READINGFILE“BUFFEREDREADERIN2NEWBUFFEREDREADERNEWINPUTSTREAMREADERNEWGZIPINPUTSTREAMNEWFILEINPUTSTREAM“TESTGZ“STRINGSWHILESIN2READLINENULLSYSTEMOUTPRINTLNS/THEUSEOFTHECOMPRESSIONCLASSESISSTRAIGHTFORWARDYOUSIMPLYWRAPYOUROUTPUTSTREAMINAGZIPOUTPUTSTREAMORZIPOUTPUTSTREAMANDYOURINPUTSTREAMINAGZIPINPUTSTREAMORZIPINPUTSTREAMALLELSEISORDINARYI/OREADINGANDWRITINGTHISISANEXAMPLEOFMIXINGTHECHARORIENTEDSTREAMSWITHTHEBYTEORIENTEDSTREAMSINUSESTHEREADERCLASSES,WHEREASGZIPOUTPUTSTREAMSCONSTRUCTORCANACCEPTONLYANOUTPUTSTREAMOBJECT,NOTAWRITEROBJECTWHENTHEFILEISOPENED,THEGZIPINPUTSTREAMISCONVERTEDTOAREADERMULTIFILESTORAGEWITHZIPTHELIBRARYTHATSUPPORTSTHEZIPFORMATISMUCHMOREEXTENSIVEWITHITYOUCANEASILYSTOREMULTIPLEFILES,ANDTHERESEVENASEPARATECLASSTOMAKETHEPROCESSOFREADINGAZIPFILEEASYTHELIBRARYUSESTHESTANDARDZIPFORMATSOTHATITWORKSSEAMLESSLYWITHALLTHETOOLSCURRENTLYDOWNLOADABLEONTHEINTERNETTHEFOLLOWINGEXAMPLEHASTHESAMEFORMASTHEPREVIOUSEXAMPLE,BUTITHANDLESASMANYCOMMANDLINEARGUMENTSASYOUWANTINADDITION,ITSHOWSTHEUSEOFTHECHECKSUMCLASSESTOCALCULATEANDVERIFYTHECHECKSUMFORTHEFILETHEREARETWOCHECKSUMTYPESADLER32WHICHISFASTERANDCRC32WHICHISSLOWERBUTSLIGHTLYMOREACCURATE/C11ZIPCOMPRESSJAVA/USESZIPCOMPRESSIONTOCOMPRESSANY/NUMBEROFFILESGIVENONTHECOMMANDLINEIMPORTJAVAIOIMPORTJAVAUTILIMPORTJAVAUTILZIPPUBLICCLASSZIPCOMPRESS/THROWEXCEPTIONSTOCONSOLEPUBLICSTATICVOIDMAINSTRINGARGSTHROWSIOEXCEPTIONFILEOUTPUTSTREAMFNEWFILEOUTPUTSTREAM“TESTZIP“CHECKEDOUTPUTSTREAMCSUMNEWCHECKEDOUTPUTSTREAMF,NEWADLER32ZIPOUTPUTSTREAMOUTNEWZIPOUTPUTSTREAMNEWBUFFEREDOUTPUTSTREAMCSUMOUTSETCOMMENT“ATESTOFJAVAZIPPING“/NOCORRESPONDINGGETCOMMENT,THOUGHFORINTI0IARGSLENGTHISYSTEMOUTPRINTLN“WRITINGFILE“ARGSIBUFFEREDREADERINNEWBUFFEREDREADERNEWFILEREADERARGSIOUTPUTNEXTENTRYNEWZIPENTRYARGSIINTCWHILECINREAD1OUTWRITECINCLOSEOUTCLOSE/CHECKSUMVALIDONLYAFTERTHEFILE/HASBEENCLOSEDSYSTEMOUTPRINTLN“CHECKSUM“CSUMGETCHECKSUMGETVALUE/NOWEXTRACTTHEFILESSYSTEMOUTPRINTLN“READINGFILE“FILEINPUTSTREAMFINEWFILEINPUTSTREAM“TESTZIP“CHECKEDINPUTSTREAMCSUMINEWCHECKEDINPUTSTREAMFI,NEWADLER32ZIPINPUTSTREAMIN2NEWZIPINPUTSTREAMNEWBUFFEREDINPUTSTREAMCSUMIZIPENTRYZEWHILEZEIN2GETNEXTENTRYNULLSYSTEMOUTPRINTLN“READINGFILE“ZEINTXWHILEXIN2READ1SYSTEMOUTWRITEXSYSTEMOUTPRINTLN“CHECKSUM“CSUMIGETCHECKSUMGETVALUEIN2CLOSE/ALTERNATIVEWAYTOOPENANDREAD/ZIPFILESZIPFILEZFNEWZIPFILE“TESTZIP“ENUMERATIONEZFENTRIESWHILEEHASMOREELEMENTSZIPENTRYZE2ZIPENTRYENEXTELEMENTSYSTEMOUTPRINTLN“FILE“ZE2/ANDEXTRACTTHEDATAASBEFORE/FOREACHFILETOADDTOTHEARCHIVE,YOUMUSTCALLPUTNEXTENTRYANDPASSITAZIPENTRYOBJECTTHEZIPENTRYOBJECTCONTAINSANEXTENSIVEINTERFACETHATALLOWSYOUTOGETANDSETALLTHEDATAAVAILABLEONTHATPARTICULARENTRYINYOURZIPFILENAME,COMPRESSEDANDUNCOMPRESSEDSIZES,DATE,CRCCHECKSUM,EXTRAFIELDDATA,COMMENT,COMPRESSIONMETHOD,ANDWHETHERITSADIRECTORYENTRYHOWEVER,EVENTHOUGHTHEZIPFORMATHASAWAYTOSETAPASSWORD,THISISNOTSUPPORTEDINJAVASZIPLIBRARYANDALTHOUGHCHECKEDINPUTSTREAMANDCHECKEDOUTPUTSTREAMSUPPORTBOTHADLER32ANDCRC32CHECKSUMS,THEZIPENTRYCLASSSUPPORTSONLYANINTERFACEFORCRCTHISISARESTRICTIONOFTHEUNDERLYINGZIPFORMAT,BUTITMIGHTLIMITYOUFROMUSINGTHEFASTERADLER32TOEXTRACTFILES,ZIPINPUTSTREAMHASAGETNEXTENTRYMETHODTHATRETURNSTHENEXTZIPENTRYIFTHEREISONEASAMORESUCCINCTALTERNATIVE,YOUCANREADTHEFILEUSINGAZIPFILEOBJECT,WHICHHASAMETHODENTRIESTORETURNANENUMERATIONTOTHEZIPENTRIESINORDERTOREADTHECHECKSUMYOUMUSTSOMEHOWHAVEACCESSTOTHEASSOCIATEDCHECKSUMOBJECTHERE,AREFERENCETOTHECHECKEDOUTPUTSTREAMANDCHECKEDINPUTSTREAMOBJECTSISRETAINED,BUTYOUCOULDALSOJUSTHOLDONTOAREFERENCETOTHECHECKSUMOBJECTABAFFLINGMETHODINZIPSTREAMSISSETCOMMENTASSHOWNABOVE,YOUCANSETACOMMENTWHENYOUREWRITINGAFILE,BUTTHERESNOWAYTORECOVERTHECOMMENTINTHEZIPINPUTSTREAMCOMMENTSAPPEARTOBESUPPORTEDFULLYONANENTRYBYENTRYBASISONLYVIAZIPENTRYOFCOURSE,YOUARENOTLIMITEDTOFILESWHENUSINGTHEGZIPORZIPLIBRARIESYOUCANCOMPRESSANYTHING,INCLUDINGDATATOBESENTTHROUGHANETWORKCONNECTIONJAVAARCHIVESJARSTHEZIPFORMATISALSOUSEDINTHEJARJAVAARCHIVEFILEFORMAT,WHICHISAWAYTOCOLLECTAGROUPOFFILESINTOASINGLECOMPRESSEDFILE,JUSTLIKEZIPHOWEVER,LIKEEVERYTHINGELSEINJAVA,JARFILESARECROSSPLATFORMSOYOUDONTNEEDTOWORRYABOUTPLATFORMISSUESYOUCANALSOINCLUDEAUDIOANDIMAGEFILESASWELLASCLASSFILESJARFILESAREPARTICULARLYHELPFULWHENYOUDEALWITHTHEINTERNETBEFOREJARFILES,YOURWEBBROWSERWOULDHAVETOMAKEREPEATEDREQUESTSOFAWEBSERVERINORDERTODOWNLOADALLOFTHEFILESTHATMAKEUPANAPPLETINADDITION,EACHOFTHESEFILESWASUNCOMPRESSEDBYCOMBININGALLOFTHEFILESFORAPARTICUL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 账单分期专业知识培训课件
- 2025年度新型石材交易合同范本
- 2025版食品运输合同范本
- 2025办公室文员办公自动化设备节能降耗合同
- 2025年度保险业保险科技应用咨询服务合同模板
- 2025年橱柜智能化改造与购销合同
- 2025版高速公路土方分包劳务合同模板
- 2025彩砖新材料研发与应用采购合同
- 2025年度物流行业司机聘用合同示范范本
- 2025年度高端住宅小区车位租赁服务合同
- 浪浪山小妖怪-2025~2026学年美术开学第一课《浪浪山小妖怪》
- 2025广东湛江市廉江市政协办公室等7个单位招聘政府雇员9人笔试参考题库附答案解析
- 2025年度制造业员工劳动合同范本
- 中国象棋教学课件
- 福建省泉州市晋江市2024-2025学年七年级(下)期末语文试卷(含解析)
- 2025年浙江省慈溪市辅警招聘考试试题题库带答案详解
- 2025成人高考政治试题及答案专升本
- 1.1.1观察周边环境中的生物 课件 人教版生物七年级上册
- 110kV变电站通信系统施工方案与技术要求
- 多系统联合仿真平台在燃气轮机设计与开发中的应用
- 中班健康:变质食物不能吃
评论
0/150
提交评论