這段時間項目中碰到一個問題,就是在做頁面操作的時候,要保存的數據長度大於了表定義的字段長度,我們現在的項目是基於component開發,由於component是屬於德國人開發,且德國人不願意更改他們的設計,所以最後沒有辦法最後只能想到了一個對字符串進行壓縮然後把壓縮後的字符串存進數據庫中,當需要從數據庫中取數據時,需要對取出的數據進行解壓縮,以前沒有碰到過這種情況,所以花了很久的時間才寫好了一個對字符串進行壓縮和解壓縮的類,如果寫的不恰當的地方或者有更好的辦法,還希望各位不吝賜教,該類的代碼如下:
- package com.eric.io;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.util.zip.GZIPInputStream;
- import java.util.zip.GZIPOutputStream;
-
- public class StringCompression {
- //經過實踐考證,當需要壓縮的字符串長度越大時,壓縮的效果越明顯
- static String code="UTF-8";
- public static String compress(String str) throws IOException {
- System.out.println("壓縮之前的字符串大小:"+str.length());
- if (str == null || str.length() == 0) {
- return str;
- }
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- GZIPOutputStream gzip = new GZIPOutputStream(out);
- gzip.write(str.getBytes());
- gzip.close();
- return out.toString("ISO-8859-1");
- }
-
- public static String uncompress(String str) throws IOException {
- System.out.println("壓縮之後的字符串大小:"+str.length());
- if (str == null || str.length() == 0) {
- return str;
- }
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes("ISO-8859-1"));
- GZIPInputStream gunzip = new GZIPInputStream(in);
- byte[] buffer = new byte[256];
- int n;
- while ((n = gunzip.read(buffer)) >= 0) {
- out.write(buffer, 0, n);
- }
- return out.toString();
- }
-
- public static void main(String[] args) throws IOException {
-
- System.out.println(StringCompression.uncompress(StringCompression.compress(OracleCompressTest.append("i come from china"))));
- }
-
- }
-
- /*
- *
- * History:
- *
- *
- *
- * $Log: $
- */