java教程:字符串的壓縮與解壓

java教程:字符串的壓縮與解壓

ID:17689432

大小:112.00 KB

頁數(shù):10頁

時間:2018-09-04

java教程:字符串的壓縮與解壓_第1頁
java教程:字符串的壓縮與解壓_第2頁
java教程:字符串的壓縮與解壓_第3頁
java教程:字符串的壓縮與解壓_第4頁
java教程:字符串的壓縮與解壓_第5頁
資源描述:

《java教程:字符串的壓縮與解壓》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、Java教程:字符串的壓縮與解壓時間:2012-05-1409:36點擊:107次【大中小】本節(jié)摘要:本節(jié)主要簡單介紹對字符串的壓縮與解壓。1.引言最近在做項目中,平臺提供一個http服務給其他系統(tǒng)調(diào)用,然后我接收到其他系統(tǒng)的json格式的報文后去解析,然后用拿到的數(shù)據(jù)去調(diào)用corba服務,我再把corba的返回值封裝完成json字符串返回給外部系統(tǒng)。遇到一個接口去調(diào)用corba服務,然后corba返回的數(shù)據(jù)經(jīng)過封裝后字符串的長度達到7M左右,導致http客戶端無法正常的接收完所有的數(shù)據(jù)。你可能會說這個接

2、口設(shè)計的不合理,為什么不增加查詢條件把查詢條件范圍縮小一點?但是,這個不是本節(jié)要討論的內(nèi)容,主要是因為corba服務已經(jīng)發(fā)布用了很久且不在此次項目改造范圍之內(nèi),再者這個corba服務已經(jīng)上線用了N久,輕易的改變可能會導致未知的錯誤。簽于此,我想到可以把json格式的字符串給壓縮,然后客戶端再解壓。(一是字符串的壓縮比例比較的高,二是字符串的壓縮和解壓實現(xiàn)起來也比較簡單)。雖然,最后沒有用到字符串的壓縮和解壓的方式,而是修改客戶端(1.http客戶端進一步精確查詢條件2.讀取返回數(shù)據(jù)流采用循環(huán)讀取的方式)來

3、解決此問題,我還是把字符串的壓縮和解壓做一下簡單的記錄。2.關(guān)于壓縮與解壓壓縮算法有多種,我說知道和接觸有javaI/O自帶的zip和gzip兩種方式。本節(jié)主要來簡單介紹一下在系統(tǒng)交互之間遇到大容量的字符串數(shù)據(jù)交互時,采用一端壓縮,另一端再解壓的方式來發(fā)送和接收數(shù)據(jù)。關(guān)于此次的壓縮和解壓用到的主要就是GZIPOutputStream和GZIPInputStream類,此類的相關(guān)介紹在JDK中有詳細的介紹,這里就不再累述了。?3.代碼如下:?壓縮:壓縮????/**?????*字符串的壓縮?????*???

4、??*@paramstr?????*???????????待壓縮的字符串?????*@return???返回壓縮后的字符串?????*@throwsIOException?????*/????publicstaticStringcompress(Stringstr)throwsIOException{????????if(null==str

5、

6、str.length()<=0){????????????returnstr;????????}????????//創(chuàng)建一個新的byte數(shù)組輸出流????????B

7、yteArrayOutputStreamout=newByteArrayOutputStream();????????//使用默認緩沖區(qū)大小創(chuàng)建新的輸出流????????GZIPOutputStreamgzip=newGZIPOutputStream(out);????????//將b.length個字節(jié)寫入此輸出流????????gzip.write(str.getBytes());????????gzip.close();????????//使用指定的charsetName,通過解碼字節(jié)將緩沖區(qū)內(nèi)容轉(zhuǎn)

8、換為字符串????????returnout.toString("ISO-8859-1");????}解壓:>?/**?????*字符串的解壓?????*?????*@paramstr?????*???????????對字符串解壓?????*@return???返回解壓縮后的字符串?????*@throwsIOException?????*/????publicstaticStringunCompress(Stringstr)throwsIOException{????????if(null==str

9、

10、

11、str.length()<=0){????????????returnstr;????????}????????//創(chuàng)建一個新的byte數(shù)組輸出流????????ByteArrayOutputStreamout=newByteArrayOutputStream();????????//創(chuàng)建一個ByteArrayInputStream,使用buf作為其緩沖區(qū)數(shù)組????????ByteArrayInputStreamin=newByteArrayInputStream(str????????????????

12、.getBytes("ISO-8859-1"));????????//使用默認緩沖區(qū)大小創(chuàng)建新的輸入流????????GZIPInputStreamgzip=newGZIPInputStream(in);????????byte[]buffer=newbyte[256];????????intn=0;????????while((n=gzip.read(buffer))>=0){//將未壓縮數(shù)據(jù)讀入字節(jié)數(shù)組??????????

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。