使用java自带的zip api压缩解压缩文本

早上在论坛中看到有人提问, 感觉有点兴趣, 于是就看了一下. 首先想到的是java 自带的zip 包. 看了一下API文档, 发现原来有完整的例子, 包括压缩和解压缩. 以下的内容来自java.util.zip.Inflater的javadoc, 只是稍作了一些修改.


 public static void compressString() {
  System.out.println("//START//");
  try {
   // Encode a String into bytes
   String inputString = "LLLLLLLLLLLLLLLLLLLLLLLLLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG";
   byte[] input = inputString.getBytes("UTF-8");

   // Compress the bytes
   byte[] output = new byte[100];
   Deflater compresser = new Deflater();
   compresser.setInput(input);
   compresser.finish();
   int compressedDataLength = compresser.deflate(output);
   System.out.println("Input string:" + inputString);
   System.out.println("Input length:" + input.length);
   System.out.println("Compressed length:" + compressedDataLength);
   System.out.println("Compressed string:" + new String(output));

   // Decompress the bytes
   Inflater decompresser = new Inflater();
   decompresser.setInput(output, 0, compressedDataLength);
   byte[] result = new byte[100];
   int resultLength = decompresser.inflate(result);
   decompresser.end();

   // Decode the bytes into a String
   String outputString = new String(result, 0, resultLength, "UTF-8");
   System.out.println("Decompressed string:" + outputString);
  } catch (java.io.UnsupportedEncodingException ex) {
   // handle
  } catch (java.util.zip.DataFormatException ex) {
   // handle
  }
 }

找到了现成的代码, 感觉还有些不过瘾, 于是又藏式用stream方式来实现. 


 public static void compressStringWithStream() throws Exception {
  System.out.println("//START//");

  String inputString = "LLLLLLLLLLLLLLLLLLLLLLLLLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG";
  byte[] input = inputString.getBytes();

  // compress
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  DeflaterOutputStream zos = new DeflaterOutputStream(baos);
  zos.write(input);
  zos.finish();
  zos.flush();
  byte[] compressedData = baos.toByteArray();
  System.out.println("Input string:" + inputString);
  System.out.println("Input length:" + input.length);
  System.out.println("Compressed length:" + compressedData.length);
  System.out.println("Compressed string:" + new String(compressedData));

  // decompress
  ByteArrayInputStream bais = new ByteArrayInputStream(compressedData);
//  Inflater inflater = new Inflater();
//  inflater.setInput(compressedData);
//  InflaterInputStream gis = new InflaterInputStream(bais, new Inflater());
  InflaterInputStream gis = new InflaterInputStream(bais);
  ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
  int i;
  while ((i = gis.read()) != -1) {
   baos2.write(i);
  }
 
  byte[] decompressedData = baos2.toByteArray();
  gis.read(decompressedData);
  System.out.println("Decompressed length:" + decompressedData.length);
  System.out.println("Decompressed string:" + new String(decompressedData));
 }

其实碰到问题需要解决时, 思路很重要, 要试着去找最直接简单的方法. 压缩 > zip > java.util.zip 想到这个, 问题解决一半了. 这个也需要一定的经验, 就是说你至少要知道java已经提供了zip包. 说道这里, 不得不说的是, 很多东西(工具/类库), 其实当你看第一眼的时候, 你只需要去了解他能够做什么, 至于怎么用如果时间有限的话可以暂时不看, 到了真正要使用的时候再去看也不迟. 只要知道有这么个东西, 当你碰到相应的问题的时候能够想到可以用它来帮你解决问题就好了. 这个也是需要积累的, 但是只看一个功能概要比起仔细研究来说, 所花的时间少多了. 只有到了真正使用的时候才去了解. 另外, 在互联网发达的现在, 应该更好的去利用搜索引擎. 就算java本身没有提供zip包, 你也应该且十分必要去尝试搜索是否已经有人实现了这个功能, open source这么多, 很多时候总有一款能够满足你的需求, 应该尽量避免重新造轮子.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值