麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

JAVA下的GZIP應用

2019-11-18 13:26:23
字體:
來源:轉載
供稿:網友

  作者: 陳慧民
  gzip是目前廣泛應用的一種壓縮方式,它具有很高的壓縮比和壓縮效率.在sun公司發布的jdk中包含了java.util.zip包,對gzip提供了直接支持.使用java語言可以很方便的實現gzip壓縮和解壓縮.以下是一個壓縮和解壓縮的最簡程序.
  (壓縮:gzip.java)
  import java.io.*;
  import java.util.zip.*;
  public class gzip
  {
  public static void main(String[] args)
  {
  if (args.length !=2)
  {
  System.out.  System.exit(1);
  }
  try
  {
  //打開需壓縮文件作為文件輸入流
  FileInputStream fin=new FileInputStream(args[0]);
  //建立壓縮文件輸出流
  FileOutputStream fout=new FileOutputStream(args[1]);
  //建立gzip壓縮輸出流
  GZIPOutputStream gzout=new GZIPOutputStream(fout);
  byte[] buf=new byte[1024];//設定讀入緩沖區尺寸
  int num;
  while ((num=fin.read(buf)) != -1)
  {
  gzout.write(buf,0,num);
  }
  gzout.close();//!!!關閉流,必須關閉所有輸入輸出流.保證輸入輸出完整和釋放系統資源.
  fout.close();
  fin.close();
  }catch(IOException e)
  {
  System.out.println(e);
  }
  }
  }
  (解壓縮:unzip.java)
  import java.io.*;
  import java.util.zip.*;
  public class ungzip
  {
  public static void main(String[] args)
  {
  if (args.length !=2)
  {
  System.out.println("Usage:java ungzip ");
  System.exit(1);
  }
  try
  {
  //建立gzip壓縮文件輸入流
  FileInputStream fin=new FileInputStream(args[0]);
  //建立gzip解壓工作流
  GZIPInputStream gzin=new GZIPInputStream(fin);
  //建立解壓文件輸出流
  FileOutputStream fout=new FileOutputStream(args[1]);
  byte[] buf=new byte[1024];
  int num;
  while ((num=gzin.read(buf,0,buf.length)) != -1)
  {
  fout.write(buf,0,num);
  }
  gzin.close();
  fout.close();
  fin.close();
  }catch(IOException e)
  {
  System.out.println(e);
  }
  }
  }
  非面向對象語言要實現保存工作數據(如一個繪圖程序保存一幅畫面的定義),往往需要一個程序數據格式轉換為外部文件格式存儲,工作時再反向轉換的過程.實現比較麻煩,編程不透明.而java語言是一種面向對象的語言,使用它的對象序列化特性,就可實現將工作對象(畫面定義對象數據)直接寫入硬盤,需要時再直接再讀入內存,不需任何額外操作.實現非常 方便.但由于寫出對象為java類格式,因此數據冗余度較大.當數據量很大時,往往造成存儲文件很大.過多的磁盤操作也導致數據讀入花費了更多時間,占有了大量內存.采用gzip壓縮存儲對象是解決此類問題的有效手段.(在本人實現的一個監控系 統中,調入一幅測試畫面(10萬個
組件,壓縮前7M,壓縮后600K),壓縮前對如畫面后內存為26M,壓縮后讀入內存為12M,讀入速度也大幅提高.效果十分明顯).
  java程序開發網絡應用程序是它的最大優勢,但在某些低速網絡情況下(Internet、撥號網絡).網絡往往造成傳輸瓶頸, 影響應用效果,對于實時性要求高的應用影響更大.采用壓縮可以有效改善通信效果.
  可見,在java下的對象gzip壓縮有著廣泛的應用價值.以下是一個簡單事例程序.
  (串行化的數據對象文件:Data.java)
  import java.io.*;
  import java.util.zip.*;
  public class Data implements Serializable//繼續串行序列化接口
  {
  String name="匹配";
  int age=123;
  float height=1.902f;
  }
  (對象壓縮解壓縮類文件:compressObject.java)
  import java.util.zip.*;
  import java.io.*;
  public final class compressObject
  {
  //將Data類型數據對象序列化對象壓縮,返回字節數組,壓縮后的對象數組可寫入文件保存或用于網絡傳輸
  public static byte[] writeCompressObject(Data object_)
  {
  byte[] data_=null;
  try
  {
  //建立字節數組輸出流
  ByteArrayOutputStream o = new ByteArrayOutputStream();
  //建立gzip壓縮輸出流
  GZIPOutputStream gzout=new GZIPOutputStream(o);
  //建立對象序列化輸出流
  ObjectOutputStream out = new ObjectOutputStream(gzout);
  out.writeObject(object_);
  out.flush();
  out.close();
  gzout.close();
  //返回壓縮字節流
  data_=o.toByteArray();
  o.close();
  }catch(IOException e)
  {
  System.out.println(e);
  }
  return(data_);
  }
  //將壓縮字節數組還原為Data類型數據對象
  public static Data readCompressObject(byte[] data_)
  {
  Data object_=null;
  try
  {
  //建立字節數組輸入流
  ByteArrayInputStream i = new ByteArrayInputStream(data_);
  //建立gzip解壓輸入流
  GZIPInputStream gzin=new GZIPInputStream(i);
  //建立對象序列化輸入流
  ObjectInputStream in = new ObjectInputStream(gzin);
  //按制定類型還原對象
  object_=(Data)in.readObject();
  i.close();
  gzin.close();
  in.close();
  }catch(ClassNotFoundException e)
  {
  System.out.println(e);
  }catch(IOException e)
  {
  System.out.println(e);
  }
  return(object_);
  }
  }
  (主程序:test.java)
  import java.io.*;
  import java.util.zip.*;
  public class test
  {
  public static void main(String[] args)
  {
  Data testData_=new Data();
  //未壓縮數據對象內容
  System.out.println("name="+testData_.name+" age="+testData_.age+" height="+testData_.height);
  //壓縮
  byte[] i_=compressObject.writeCompressObject(testData_);
  /*
  可執行保存或網絡傳輸,需要時還原或在對端還原
  */
  //解壓縮
  Data o_=compressObject.readCompressObject(i_);
  //解壓縮后對象內容
  System.out.println("name="+o_.name+" age="+o_.age+" height="+o_.height);
  }
  }
  以上只是java下應用gzip壓縮的一個簡單例子,請大家舉一反三在自己的開發中使用.由于本人水平所限,不當之處
  敬請指正.來信請寄[email protected].
  (程序全部經過測試, 編譯環境:pentiumII 233,mem 160M,win98/linux,jdk1.2-jdk1.4)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九九黄色 | 成人电影毛片 | 久久成年网站 | 久久99深爱久久99精品 | 一本色道久久综合亚洲精品小说 | 久久精品黄 | 久草手机在线观看视频 | 久久精品视频69 | 欧美亚洲一级 | 亚洲午夜视频在线 | 精品国产一区在线观看 | 国产男女 爽爽爽爽视频 | 一级免费在线视频 | 成人午夜视频在线观看 | 亚洲射逼 | 国产精选91| 九九热在线免费观看视频 | 亚洲成人在线免费 | 精品视频在线免费看 | 亚洲精品欧美二区三区中文字幕 | 国内久久久久 | 成人免费看视频 | 国内久久久久 | 在线a毛片 | 黄色a级片视频 | 成人毛片免费 | 成年性羞羞视频免费观看无限 | 久久国产乱子伦精品 | 欧洲成人综合网 | 91久久线看在观草草青青 | 黄色高清免费 | 欧美一级久久 | 女人解衣喂奶电影 | 国产免费人做人爱午夜视频 | 精品国产一区二区三区天美传媒 | 成年人免费黄色片 | 国产精品自在线拍 | 国产va在线观看 | 粉嫩粉嫩一区二区三区在线播放 | 一区二区三区欧洲 | 国产91亚洲精品一区二区三区 |