欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中文件的壓縮和解壓縮實(shí)例代碼

 更新時(shí)間:2017年03月06日 09:20:03   作者:Android-Dev  
這篇文章主要介紹了Android中文件的壓縮和解壓縮,需要的朋友可以參考下

使用場(chǎng)景

當(dāng)我們?cè)趹?yīng)用的Assets目錄中需要加入文件時(shí),可以直接將源文件放入,但這樣會(huì)造成打包后的apk整體過(guò)大,此時(shí)就需要將放入的文件進(jìn)行壓縮.又如當(dāng)我們需要從服務(wù)器中下載文件時(shí),如果下載源文件耗時(shí)又消耗流量,較大文件需要壓縮,可以使得傳輸效率大大提高.下面我們就學(xué)習(xí)下基本的文件壓縮和解壓縮.Java中提供了壓縮和解壓縮的輸入輸出流

public static void zip(String src,String dest) throwsIOException {
  //定義壓縮輸出流
  ZipOutputStreamout = null;
  try {
    //傳入源文件
    File outFile= newFile(dest);
    File fileOrDirectory= newFile(src);
    //傳入壓縮輸出流
    out = newZipOutputStream(newFileOutputStream(outFile));
    //判斷是否是一個(gè)文件或目錄
    //如果是文件則壓縮
    if (fileOrDirectory.isFile()){
      zipFileOrDirectory(out,fileOrDirectory, "");
    } else {
      //否則列出目錄中的所有文件遞歸進(jìn)行壓縮
      File[]entries = fileOrDirectory.listFiles();
      for (int i= 0; i < entries.length;i++) {
        zipFileOrDirectory(out,entries,"");
      }
    }
  }catch(IOException ex) {
    ex.printStackTrace();
  }finally{
    if (out!= null){
      try {
        out.close();
      }catch(IOException ex) {
        ex.printStackTrace();
      }
    }
  }
}
private static void zipFileOrDirectory(ZipOutputStream out, File fileOrDirectory, String curPath)throwsIOException {
  FileInputStreamin = null;
  try {
    //判斷目錄是否為null
    if (!fileOrDirectory.isDirectory()){
      byte[] buffer= new byte[4096];
      int bytes_read;
      in= newFileInputStream(fileOrDirectory);
      //歸檔壓縮目錄
      ZipEntryentry = newZipEntry(curPath + fileOrDirectory.getName());
      //將壓縮目錄寫到輸出流中
      out.putNextEntry(entry);
      while ((bytes_read= in.read(buffer))!= -1) {
        out.write(buffer,0, bytes_read);
      }
      out.closeEntry();
    } else {
      //列出目錄中的所有文件
      File[]entries = fileOrDirectory.listFiles();
      for (int i= 0; i < entries.length;i++) {
        //遞歸壓縮
        zipFileOrDirectory(out,entries,curPath + fileOrDirectory.getName()+ "/");
      }
    }
  }catch(IOException ex) {
    ex.printStackTrace();
  }finally{
    if (in!= null){
      try {
        in.close();
      }catch(IOException ex) {
        ex.printStackTrace();
      }
    }
  }
}

上述代碼存在問(wèn)題,若文件壓縮后仍然很大怎么辦,換句話說(shuō)文件壓縮率低也是問(wèn)題,java中也專門對(duì)Linux提供了高壓縮率的輸入輸出流,其使用方法和上述代碼相似.高壓縮率輸入輸出流:(GZIPInputStream和GZIPOutputStream)

文件壓縮

public static void zip(File srcFile, File desFile)throwsIOException {
  GZIPOutputStreamzos = null;
  FileInputStreamfis = null;
  try {
    //創(chuàng)建壓縮輸出流,將目標(biāo)文件傳入
    zos = newGZIPOutputStream(newFileOutputStream(desFile));
    //創(chuàng)建文件輸入流,將源文件傳入
    fis = newFileInputStream(srcFile);
    byte[] buffer= new byte[1024];
    int len= -1;
    //利用IO流寫入寫出的形式將源文件寫入到目標(biāo)文件中進(jìn)行壓縮
    while ((len= (fis.read(buffer)))!= -1) {
      zos.write(buffer,0, len);
    }
  }finally{
    close(zos);
    close(fis);
  }
}

文件解壓縮

public static void unZip(File srcFile,File desFile) throws IOException {
  GZIPInputStream zis= null;
  FileOutputStreamfos = null;
  try {
    //創(chuàng)建壓縮輸入流,傳入源文件
    zis = new GZIPInputStream(newFileInputStream(srcFile));
    //創(chuàng)建文件輸出流,傳入目標(biāo)文件
    fos = newFileOutputStream(desFile);
    byte[] buffer= new byte[1024];
    int len= -1;
    //利用IO流寫入寫出的形式將壓縮源文件解壓到目標(biāo)文件中
    while ((len= (zis.read(buffer)))!= -1) {
      fos.write(buffer,0, len);
    }
  }finally{
    close(zis);
    close(fos);
  }
}

以上所述是小編給大家介紹的Android中文件的壓縮和解壓縮實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android上傳文件到Web服務(wù)器 PHP接收文件

    Android上傳文件到Web服務(wù)器 PHP接收文件

    這篇文章主要為大家詳細(xì)介紹了Android上傳文件到Web服務(wù)器,PHP接收文件的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Android拍照保存在系統(tǒng)相冊(cè)不顯示的問(wèn)題解決方法

    Android拍照保存在系統(tǒng)相冊(cè)不顯示的問(wèn)題解決方法

    我們保存相冊(cè)到Android手機(jī)的時(shí)候,然后去打開(kāi)系統(tǒng)圖庫(kù)找不到我們想要的那張圖片,那是因?yàn)槲覀儾迦氲膱D片還沒(méi)有更新的緣故,下面與大家分享下此問(wèn)題的解決方法
    2013-06-06
  • Android編程簡(jiǎn)單實(shí)現(xiàn)雷達(dá)掃描效果

    Android編程簡(jiǎn)單實(shí)現(xiàn)雷達(dá)掃描效果

    這篇文章主要介紹了Android編程簡(jiǎn)單實(shí)現(xiàn)雷達(dá)掃描效果,涉及Android圖形繪制及顯示的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Android客戶端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解

    Android客戶端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解

    這篇文章主要為大家介紹了Android客戶端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Android GSYVideoPlayer視頻播放器功能的實(shí)現(xiàn)

    Android GSYVideoPlayer視頻播放器功能的實(shí)現(xiàn)

    這篇文章主要介紹了Android GSYVideoPlayer視頻播放器功能的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Android Scroller及下拉刷新組件原理解析

    Android Scroller及下拉刷新組件原理解析

    這篇文章主要為大家詳細(xì)解析了Android Scroller及下拉刷新組件原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • android檢測(cè)SD卡讀寫權(quán)限方法

    android檢測(cè)SD卡讀寫權(quán)限方法

    今天小編就為大家分享一篇android檢測(cè)SD卡讀寫權(quán)限方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Android自定義view仿iOS彈出框效果

    Android自定義view仿iOS彈出框效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義view仿iOS彈出框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Android入門教程之組件Activity的生命周期詳解

    Android入門教程之組件Activity的生命周期詳解

    Activity作為四大組件之一,出現(xiàn)的頻率相當(dāng)高,基本上我們?cè)赼ndroid的各個(gè)地方都能看見(jiàn)它的蹤影,因此深入了解Activity,對(duì)于開(kāi)發(fā)高質(zhì)量應(yīng)用程序是很有幫助的。今天我們就來(lái)詳細(xì)地聊聊Activity的生命周期,以便我們?cè)谝院蟮拈_(kāi)發(fā)中能如魚得水
    2021-10-10
  • 詳解Android Service 使用時(shí)的注意事項(xiàng)

    詳解Android Service 使用時(shí)的注意事項(xiàng)

    這篇文章主要介紹了詳解Android Service 使用時(shí)的注意事項(xiàng),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10

最新評(píng)論