• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Java的源文件數(shù)據(jù)測(cè)試研究

      2017-03-11 01:41:08趙景惠
      關(guān)鍵詞:中文名稱源文件亂碼

      ◆趙景惠

      (北京交通大學(xué)經(jīng)濟(jì)管理學(xué)院 北京 100044)

      基于Java的源文件數(shù)據(jù)測(cè)試研究

      ◆趙景惠

      (北京交通大學(xué)經(jīng)濟(jì)管理學(xué)院 北京 100044)

      本文在討論實(shí)現(xiàn)zip數(shù)據(jù)壓縮常用類后,針對(duì)JDK提供的ZIP包在壓縮中文文件時(shí)出現(xiàn)的亂碼問題,提出了修改ZIP包源代碼和利用Ant包兩個(gè)解決亂碼問題的方法,最后利用Ant包實(shí)現(xiàn)了一個(gè)壓縮中文文件夾的類,其壓縮時(shí)間和壓縮比介于winrar和winzip之間,該壓縮方法有一定的實(shí)用價(jià)值。

      Java;Ant;winrar;winzip;ZIP算法;文件壓縮

      0 引言

      Java在文件壓縮和解壓方面 Java提供了兩種最常用的壓縮算法GZIP和ZIP。GZIP算法相對(duì)簡(jiǎn)單且沒有ZIP算法使用范圍廣,下面主要討論ZIP算法。

      1 zip數(shù)據(jù)壓縮常用類

      Java 1.7實(shí)現(xiàn)了I/O數(shù)據(jù)流與網(wǎng)絡(luò)數(shù)據(jù)流的單一接口,因此數(shù)據(jù)的壓縮、網(wǎng)絡(luò)傳輸和解壓縮的實(shí)現(xiàn)比較容易。一個(gè)zip文件由多個(gè)entry組成,每個(gè)entry有一個(gè)唯一的名稱,entry的數(shù)據(jù)項(xiàng)存儲(chǔ)壓縮數(shù)據(jù)。實(shí)現(xiàn) zip數(shù)據(jù)壓縮兩個(gè)主要 Java類是 ZipEntry和ZipOutputStream。

      (1)類ZipEntry:

      public ZipEntry(String name); name為指定的數(shù)據(jù)項(xiàng)名。(2)類ZipOutputStream:

      ZipOutputStream實(shí)現(xiàn)了zip壓縮文件的寫輸出流,支持壓縮和非壓縮 entry。對(duì)于要加入壓縮檔的每一個(gè)文件,都必須調(diào)用putNextEntry(),并將其傳遞給一個(gè)ZipEntry對(duì)象。ZipEntry對(duì)象包含了一個(gè)功能全面的接口,使用它可以獲得和設(shè)置Zip文件內(nèi)那個(gè)特定的 Entry(入口)上能夠接受的所有數(shù)據(jù):名字、壓縮后和壓縮前的長(zhǎng)度、日期、CRC校驗(yàn)和、額外字段的數(shù)據(jù)、注釋、壓縮方法,以及它是否為一個(gè)目錄入口等[1]。

      2 壓縮中文名稱的文件

      在Java應(yīng)用程序中,對(duì)文字的編碼是以u(píng)nicode為基礎(chǔ)的,壓縮的文件名,也是以u(píng)nicode來編碼的,然而,在現(xiàn)今市面上的大部分壓縮軟件,比如winzip、winrar等,不支持unicode的編碼方式,因而用Java軟件壓縮后的中文文件名顯示出來是亂碼。要解決在壓縮中文文件時(shí)出現(xiàn)的亂碼問題,可通過以下兩種方式解決。

      2.1 修改ZIP包源代碼

      對(duì)文件的壓縮是通過ZipOutputStream類來完成,通過修改這兩個(gè)類的編碼方式,可以對(duì)中文文件名進(jìn)行處理[2]。

      從JDK的src.zip取得ZipOutputStream.java源代碼(通常在JDK的安裝目錄下),另存為CNZipOutputStream.java。修改源代碼如下。

      public CNZipOutputStream(OutputStream out,String encoding){

      super(out,new Deflater(Deflater.DEFAULT_COMPRESSION,true));

      usesDefaultDeflater=true;

      this.encoding=encoding;

      }

      byte[] nameBytes=null;

      try{

      if(this.encoding.toUpperCase().equals(“UTF-8”))

      nameBytes=getUTF8Bytes(e.name);

      else

      nameBytes= e.name.getBytes(this.encoding);

      }

      catch(Exception byteE){

      nameBytes=getUTF8Bytes(e.name);

      }

      2.2 利用ant包實(shí)現(xiàn)myzip類

      也可以利用開源的Apache項(xiàng)目提供的ant包來壓縮中文名稱的文件,下載URL地址為http://ant.apache.org/,下載ant源文件apache-ant-1.7.0-src.zip,解壓后在Ant的org包里有實(shí)現(xiàn)zip算法的全部java源文件,利用import org.apache.tools.zip.*命令導(dǎo)入這些類文件即可。Ant包提供的ZIP壓縮類解決了壓縮中文名稱文件時(shí)的亂碼問題。以下為用ant包實(shí)現(xiàn)的類myzip的過程,利用myzip類的類方法zipFile即可實(shí)現(xiàn)中文文件夾的壓縮[3]。

      import org.apache.tools.zip.*;

      import java.io.*;

      public class myzip {

      public static void zipFile(String inputFileName , String zipFileName) throws Exception {

      File zipFileSrc=new File(inputFileName);

      ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));

      zip(out, zipFileSrc, "");

      }

      private void zip(ZipOutputStream out, File f, String base) throws Exception {

      if (f.isDirectory()) {

      File[] fl = f.listFiles();

      for (int i = 0; i 〈 fl.length; i++) {zip(out, fl[i], base + fl[i].getName());}

      }else {

      out.putNextEntry(new ZipEntry(base));

      FileInputStream fin = new FileInputStream(f);

      while ((num=fin.read(buf))!=-1){out.write(buf,0,num);}

      fin.close();

      } } }

      3 測(cè)試和結(jié)論

      通過在微機(jī)上文件壓縮測(cè)試,得出本文利用Java編寫的壓縮程序myzip同winzip和winrar在壓縮時(shí)間和壓縮后尺寸的數(shù)據(jù),通過比較發(fā)現(xiàn)myzip和winzip、winrar的壓縮比基本接近,但myzip的時(shí)間消耗多于winzip和winrar。綜合來看,myzip的性能接近winrar和winzip,在winrar和winzip程序代碼未開源的情況下它還是有一定的實(shí)用價(jià)值。

      [1]汪曉平,俞俊,李功.精通Java網(wǎng)絡(luò)編程[M].北京:清華大學(xué)出版社,2010.

      [2]袁海燕,王文濤.Java實(shí)用程序設(shè)計(jì)100例[M].北京:人民郵電出版社,2015.

      [3]張軍麗.Java中文件壓縮的實(shí)現(xiàn)[J].池州師專學(xué)報(bào),2005.

      猜你喜歡
      中文名稱源文件亂碼
      這些真的不是亂碼,是漢字
      網(wǎng)絡(luò)社區(qū)劃分在軟件質(zhì)量問題分析中的應(yīng)用
      基于源文件可疑度的軟件缺陷定位方法研究
      LKJ基礎(chǔ)數(shù)據(jù)源文件自動(dòng)編制系統(tǒng)的研究
      國(guó)際品牌要注重保護(hù)商標(biāo)的中文名稱
      國(guó)際品牌在華商標(biāo)保護(hù)究竟出了什么問題?
      炫邁:用神奇亂碼勾引你視線
      誤寫C源文件擴(kuò)展名為CPP的危害
      如何解決Tomcat的亂碼
      為何歌曲在手機(jī)上顯示亂碼?等
      奉贤区| 开远市| 泸州市| 天津市| 武义县| 汝阳县| 庄浪县| 开鲁县| 庆云县| 蒙城县| 华池县| 肃宁县| 乐山市| 阿荣旗| 临泽县| 德格县| 大庆市| 南安市| 汉沽区| 莆田市| 老河口市| 高青县| 龙川县| 江津市| 浠水县| 盐山县| 兴安盟| 桦川县| 霍林郭勒市| 宣化县| 吉首市| 泰兴市| 莱芜市| 读书| 京山县| 于都县| 文成县| 蓬溪县| 二连浩特市| 岳阳县| 永福县|