WEB开发网
开发学院软件开发Java Java对数据库的字符串字段进行压缩保存的尝试 阅读

Java对数据库的字符串字段进行压缩保存的尝试

 2009-09-05 00:00:00 来源:WEB开发网   
核心提示:数据字段一般都是保存原文的,一来方便在数据库修改和维护,Java对数据库的字符串字段进行压缩保存的尝试,而来有一些查询要用到它,但是在有些时候,就用Zip进行尝试就可以了,先看看如何把字符串压缩和解压缩的算法,我们无需保存原文了,比如在论坛

数据字段一般都是保存原文的,一来方便在数据库修改和维护,而来有一些查询要用到它。但是在有些时候,我们无需保存原文了,比如在论坛,博客等数据里的内容字段,一般使用Clob类型,其很少参与搜索,而且就算要全文检索,我们也不推荐使用数据库的like 等,而应该用第三方的全文检索工具,比如lucene等实现。

这类数据都是大量的文本数据,有很大的可压缩性。由于一些原因,我的数据库已经超过我能容忍的大小了,所以想到了是否可以把这个数据压缩存储来节省空间,于是有了如下的尝试。

压缩算法就先不过多考虑了,就用Zip进行尝试就可以了。先看看如何把字符串压缩和解压缩的算法。

package com.laozizhu.article.util;   
import java.io.ByteArrayInputStream;   

import java.io.ByteArrayOutputStream;   
import java.util.zip.GZIPInputStream;   
import java.util.zip.GZIPOutputStream;   
/**  
 * 把字符串使用ZIP压缩和解压缩的代码。  
 *   
 * @author JAVA世纪网(java2000.net, laozizhu.com)  
 */  
public class StringZip {   
  public static String zipString(String str) {   
    try {   
      ByteArrayOutputStream bos = null;   
      GZIPOutputStream os = null;   
      byte[] bs = null;   
      try {   
        bos = new ByteArrayOutputStream();   
        os = new GZIPOutputStream(bos);   
        os.write(str.getBytes());   
        os.close();   
        bos.close();   
        bs = bos.toByteArray();   
        return new String(bs, "iso-8859-1");   
      } finally {   
        bs = null;   
        bos = null;   
        os = null;   
      }   
    } catch (Exception ex) {   
      return str;   
    }   
  }   
  public static String unzipString(String str) {   
    ByteArrayInputStream bis = null;   
    ByteArrayOutputStream bos = null;   
    GZIPInputStream is = null;   
    byte[] buf = null;   
    try {   
      bis = new ByteArrayInputStream(str.getBytes("ISO-8859-1"));   
      bos = new ByteArrayOutputStream();   
      is = new GZIPInputStream(bis);   
      buf = new byte[1024];   
      int len;   
      while ((len = is.read(buf)) != -1) {   
        bos.write(buf, 0, len);   
      }   
      is.close();   
      bis.close();   
      bos.close();   
      return new String(bos.toByteArray());   
    } catch (Exception ex) {   
      return str;   
    } finally {   
      bis = null;   
      bos = null;   
      is = null;   
      buf = null;   
    }   
  }   
}  

1 2  下一页

Tags:Java 数据库 字符串

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接