最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java字符串的壓縮與解壓縮的兩種方法

 更新時間:2021年03月04日 17:04:26   作者:chen子健  
這篇文章主要介紹了Java字符串的壓縮與解壓縮的兩種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

應(yīng)用場景

當(dāng)字符串太長,

需要將字符串值存入數(shù)據(jù)庫時,如果字段長度不夠,則會出現(xiàn)插入失?。?/p>

或者需要進(jìn)行Http傳輸時,由于參數(shù)長度過長造成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);
}

注意事項(xiàng)

在web項(xiàng)目中,服務(wù)器端將加密后的字符串返回給前端,前端再通過ajax請求將加密字符串發(fā)送給服務(wù)器端處理的時候,在http傳輸過程中會改變加密字符串的內(nèi)容,導(dǎo)致服務(wù)器解壓壓縮字符串發(fā)生異常:

java.util.zip.ZipException: Not in GZIP format

解決方法:

在字符串壓縮之后,將壓縮后的字符串BASE64加密,在使用的時候先BASE64解密再解壓即可。

到此這篇關(guān)于Java字符串的壓縮與解壓縮的兩種方法的文章就介紹到這了,更多相關(guān)Java字符串壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Spring @Bean 相同加載順序不同結(jié)果不同的問題記錄

    關(guān)于Spring @Bean 相同加載順序不同結(jié)果不同的問題記錄

    本文主要探討了在Spring 5.1.3.RELEASE版本下,當(dāng)有兩個全注解類定義相同類型的Bean時,由于加載順序不同,最終生成的Bean實(shí)例也會不同,文章通過分析ConfigurationClassPostProcessor的執(zhí)行過程,解釋了BeanDefinition的加載和覆蓋機(jī)制,感興趣的朋友一起看看吧
    2025-02-02
  • spring循環(huán)注入異常問題的解決方案

    spring循環(huán)注入異常問題的解決方案

    今天小編就為大家分享一篇關(guān)于spring循環(huán)注入異常問題的解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • java中TreeMap集合的常用方法詳解

    java中TreeMap集合的常用方法詳解

    本篇文章給大家?guī)淼膬?nèi)容是關(guān)于java中TreeMap集合的常用方法詳解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。下面我們就來學(xué)習(xí)一下吧
    2021-11-11
  • java解決Feign異步情況丟失上下文問題

    java解決Feign異步情況丟失上下文問題

    在微服務(wù)的開發(fā)中,我們經(jīng)常需要服務(wù)之間的調(diào)用,本文主要介紹了java解決Feign異步情況丟失上下文問題,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • SpringCloud中的熔斷監(jiān)控HystrixDashboard和Turbine示例詳解

    SpringCloud中的熔斷監(jiān)控HystrixDashboard和Turbine示例詳解

    HystrixDashboard是用于實(shí)時監(jiān)控Hystrix性能的工具,展示請求響應(yīng)時間和成功率等數(shù)據(jù),本文介紹了如何配置和使用HystrixDashboard和Turbine進(jìn)行熔斷監(jiān)控,包括依賴添加、啟動類配置和測試流程,感興趣的朋友一起看看吧
    2024-09-09
  • Java Lambda 表達(dá)式詳解及示例代碼

    Java Lambda 表達(dá)式詳解及示例代碼

    本文主要介紹Java Lambda 表達(dá)式的知識,這里整理了相關(guān)資料,JavaLambda 是Java8 引入的新功能,有興趣的小伙伴可以參考下
    2016-09-09
  • MyBatis中SqlSession生命周期的使用

    MyBatis中SqlSession生命周期的使用

    SqlSession是MyBatis的核心接口之一,本文主要介紹了MyBatis中SqlSession生命周期的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • Java基礎(chǔ)之方法重寫詳解

    Java基礎(chǔ)之方法重寫詳解

    這篇文章主要介紹了Java基礎(chǔ)之方法重寫詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • java返回的List進(jìn)行add操作報錯

    java返回的List進(jìn)行add操作報錯

    本文主要介紹了java返回的List進(jìn)行add操作報錯,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • java判斷Long類型的方法和實(shí)例代碼

    java判斷Long類型的方法和實(shí)例代碼

    在本篇文章里小編給大家整理的是關(guān)于java判斷Long類型的方法和實(shí)例代碼,對此有需要的朋友們跟著學(xué)習(xí)參考下。
    2020-02-02

最新評論

栾城县| 奎屯市| 汨罗市| 中牟县| 义乌市| 温州市| 九寨沟县| 株洲县| 万载县| 通渭县| 阿拉尔市| 克山县| 独山县| 固镇县| 湘西| 仪陇县| 三门县| 巴中市| 安国市| 张掖市| 错那县| 吴江市| 荥阳市| 罗平县| 交口县| 光泽县| 田林县| 易门县| 色达县| 安西县| 九龙县| 武宣县| 湖南省| 九龙坡区| 筠连县| 达孜县| 双桥区| 遂川县| 洛宁县| 长子县| 旬邑县|