Java字符串的壓縮與解壓縮的兩種方法
應用場景
當字符串太長,
需要將字符串值存入數據庫時,如果字段長度不夠,則會出現插入失敗;
或者需要進行Http傳輸時,由於參數長度過長造成http傳輸失敗等。
字符串壓縮與解壓方法
方法一:用 Java8中的gzip
/** * 使用gzip壓縮字符串 * @param str 要壓縮的字符串 * @return */ public static String compress(String str) { if (str == null || str.length() == 0) { return str; } ByteArrayOutputStream out = new ByteArrayOutputStream(); GZIPOutputStream gzip = null; try { gzip = new GZIPOutputStream(out); gzip.write(str.getBytes()); } catch (IOException e) { e.printStackTrace(); } finally { if (gzip != null) { try { gzip.close(); } catch (IOException e) { e.printStackTrace(); } } } return new sun.misc.BASE64Encoder().encode(out.toByteArray()); } /** * 使用gzip解壓縮 * @param compressedStr 壓縮字符串 * @return */ public static String uncompress(String compressedStr) { if (compressedStr == null) { return null; } ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayInputStream in = null; GZIPInputStream ginzip = null; byte[] compressed = null; String decompressed = null; try { compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr); in = new ByteArrayInputStream(compressed); ginzip = new GZIPInputStream(in); byte[] buffer = new byte[1024]; int offset = -1; while ((offset = ginzip.read(buffer)) != -1) { out.write(buffer, 0, offset); } decompressed = out.toString(); } catch (IOException e) { e.printStackTrace(); } finally { if (ginzip != null) { try { ginzip.close(); } catch (IOException e) { } } if (in != null) { try { in.close(); } catch (IOException e) { } } if (out != null) { try { out.close(); } catch (IOException e) { } } } return decompressed; }
方法二:用org.apache.commons.codec.binary.Base64
/** * 使用org.apache.commons.codec.binary.Base64壓縮字符串 * @param str 要壓縮的字符串 * @return */ public static String compress(String str) { if (str == null || str.length() == 0) { return str; } return Base64.encodeBase64String(str.getBytes()); } /** * 使用org.apache.commons.codec.binary.Base64解壓縮 * @param compressedStr 壓縮字符串 * @return */ public static String uncompress(String compressedStr) { if (compressedStr == null) { return null; } return Base64.decodeBase64(compressedStr); }
註意事項
在web項目中,服務器端將加密後的字符串返回給前端,前端再通過ajax請求將加密字符串發送給服務器端處理的時候,在http傳輸過程中會改變加密字符串的內容,導致服務器解壓壓縮字符串發生異常:
java.util.zip.ZipException: Not in GZIP format
解決方法:
在字符串壓縮之後,將壓縮後的字符串BASE64加密,在使用的時候先BASE64解密再解壓即可。
到此這篇關於Java字符串的壓縮與解壓縮的兩種方法的文章就介紹到這瞭,更多相關Java字符串壓縮內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java 字符串壓縮與解壓的開發記錄
- Java網絡編程TCP實現聊天功能
- 使用ByteArrayOutputStream寫入字符串方式
- Java Kryo,Protostuff,Hessian序列化方式對比
- 將InputStream轉化為base64的實例