|
服务器技术:java:gzip服务器和js客户端 [2020/03/03 15:53] admin 创建 |
服务器技术:java:gzip服务器和js客户端 [2020/03/03 16:17] (当前版本) admin |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | <p><br/>import java.io.ByteArrayInputStream;</p><br/><p><br/>import java.io.ByteArrayOutputStream;<br/>import java.io.IOException;<br/>import java.util.zip.GZIPInputStream;<br/>import java.util.zip.GZIPOutputStream;<br/><br/>public class GZIPUtils  {<br/>    public static final String GZIP_ENCODE_UTF_8 = "UTF-8";<br/><br/>    public static byte[] compress(String str, String encoding) {<br/>        if (str == null || str.length() == 0) {<br/>            return null;<br/>        }<br/>        ByteArrayOutputStream out = new ByteArrayOutputStream();<br/>        GZIPOutputStream gzip;<br/>        try {<br/>            gzip = new GZIPOutputStream(out);<br/>            gzip.write(str.getBytes(encoding));<br/>            gzip.close();<br/>        } catch ( Exception e) {<br/>            e.printStackTrace();<br/>        }<br/>        return out.toByteArray();<br/>    }<br/><br/>    public static byte[] compress(String str) throws IOException {<br/>        ///str = URLEncoder.encode(str, GZIP_ENCODE_UTF_8);<br/>        return compress(str, GZIP_ENCODE_UTF_8);<br/>    }<br/><br/><br/>    public static byte[] uncompress(byte[] bytes) {<br/>        if (bytes == null || bytes.length == 0) {<br/>            return null;<br/>        }<br/>        ByteArrayOutputStream out = new ByteArrayOutputStream();<br/>        ByteArrayInputStream in = new ByteArrayInputStream(bytes);<br/>        try {<br/>            GZIPInputStream ungzip = new GZIPInputStream(in);<br/>            byte[] buffer = new byte[256];<br/>            int n;<br/>            while ((n = ungzip.read(buffer)) >= 0) {<br/>                out.write(buffer, 0, n);<br/>            }<br/>        } catch (Exception e) {<br/>            e.printStackTrace();<br/>        }<br/>        return out.toByteArray();<br/>    }<br/><br/>    public static String uncompressToString(byte[] bytes, String encoding) {<br/>        if (bytes == null || bytes.length == 0) {<br/>            return null;<br/>        }<br/>        ByteArrayOutputStream out = new ByteArrayOutputStream();<br/>        ByteArrayInputStream in = new ByteArrayInputStream(bytes);<br/>        try {<br/>            GZIPInputStream ungzip = new GZIPInputStream(in);<br/>            byte[] buffer = new byte[256];<br/>            int n;<br/>            while ((n = ungzip.read(buffer)) >= 0) {<br/>                out.write(buffer, 0, n);<br/>            }<br/>            return out.toString(encoding);<br/>        } catch (Exception e) {<br/>            e.printStackTrace();<br/>        }<br/>        return null;<br/>    }<br/><br/>    public static String uncompressToString(byte[] bytes) {<br/>        return uncompressToString(bytes, GZIP_ENCODE_UTF_8);<br/>    }<br/><br/>    public static String toString(byte[] bytes) {<br/>        return org.apache.commons.codec.binary.Base64.encodeBase64String(bytes);<br/>    }<br/><br/>    public static byte[] decodeToString(String bytes) {<br/>        return org.apache.commons.codec.binary.Base64.decodeBase64(bytes);<br/>    }<br/><br/>    public static void main(String[] args) throws IOException {<br/>        /*String s = "{\"navigate\":\"POSLOGIN\",\"userInfo\":{\"sysDate\":1575540038000,\"userFlag\":\"Y\",\"orderType\":\"\",\"lastURL\":\"\",\"shopName\":\"安麗體驗廣場\",\"saleDate\":1575475200000,\"locale\":\"zh_TW\",\"orderChannel\":\"POS\",\"lastDateForMonth\":1577807999000,\"regionCode\":\"130\",\"staffName\":\"邱信展2\",\"logonPosFlag\":\"Y\",\"startTime\":1575540038000,\"integerFirstDateForMonth\":20191201,\"posSequence\":0,\"saleDateInt\":20191205,\"shopCode\":\"01\",\"firstDateForMonth\":1575129600000,\"cardHiddenFlag\":\"N\",\"preference\":{\"dateFormatInput\":\"yyyyMMdd\",\"currencyFormatD3\":\"#,##0.000\",\"currencyFormatD2\":\"#,##0.00\",\"dateFormat\":\"yyyy-MM-dd\",\"currencyFormatD0\":\"#,##0\",\"timeFormat\":\"HH:mm:ss\",\"dateAndTimeFormat\":\"MM-dd HH:mm\"},\"idHiddenFlag\":\"N\",\"sysDateInt\":20191205,\"privilegeInited\":false,\"staffNumber\":\"QIU02\",\"orderDivFlowList\":[],\"posCode\":\"T003\",\"inValidPrivHotKeyStrSet\":[\"A01\"],\"intSaleDateTW\":1191205,\"currencyCode\":\"NTD\",\"integerLastDateForMonth\":20191231}}";<br/>        System.out.println("字符串长度:"+s.length());<br/>        System.out.println("字符长度byte:"+   s.getBytes("UTF-8").length);<br/>        String cstr = GZIPUtils.toString( compress(s));<br/>        cstr = new String( compress(s));<br/>        System.out.println("byse64压缩后String::"+ cstr );<br/>        System.out.println("byse64压缩后ByteLength::"+ cstr.getBytes("UTF-8").length);<br/><br/><br/>        System.out.println("压缩后byte::"+compress(s).length);<br/>        System.out.println("解压后byte:"+uncompress(compress(s)).length);<br/>        System.out.println("解压字符串后::"+uncompressToString(compress(s)));<br/>        System.out.println("解压字符串后::"+toString(compress(s)));<br/>*/<br/><br/>    <br/>    }<br/><br/>}<br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p>=====================================================================</p><p><br/></p><p style="line-height: 16px;"><img src="https://wiki.gddlh.com/ueditor/dialogs/attachment/fileTypeImages/icon_txt.gif"/><a style="font-size:12px; color:#0066cc;" href="https://wiki.gddlh.com/ueditor/php/upload/file/20200303/1583223414771695.html" title="pako.html">pako.html</a></p><p style="line-height: 16px;"><img src="https://wiki.gddlh.com/ueditor/dialogs/attachment/fileTypeImages/icon_txt.gif"/><a style="font-size:12px; color:#0066cc;" href="https://wiki.gddlh.com/ueditor/php/upload/file/20200303/1583223414929887.js" title="pako.js">pako.js</a></p><p><!DOCTYPE html><br/><html><br/><head><br/>  <meta charset="UTF-8"><br/>  <title>pako.js实现gzip的压缩和解压</title><br/></head><br/><body><br/><script type="text/javascript" src="pako.js"></script><br/><script ><br/>var b64Data   = 'H4sIAAAAAAAAAG1ST4/SQBT/Kma4smZaFll62yxBGimLtqsxZmNGZgqTtDN1ZsCwhIs375q9ajwZE5NNPOnBLyMHvoVv2imQRQ4kze/fm/d7KyTIgk+JYShA48t4ePk4HKEmmmumQpFKFKyQXupeSfDanXb7FOPWGca44vQzMgXlS5BIRZlKloV1gs+MaHP1bFh96JksRiS30ObHh+2v2+33j9tvt5vfXzeff1qcZGyfcdpp+xiXGZmcAASym9nr5EWdcjEjQrCsGtllWXlfqkgKMyttOme40+12SxvFplyKC0mtldfCNtKQNHUzbd/f/f3zZXP3ybdmcirFWOqDpwFXmYTnxzvgwrAprIGr+xP42Ot68NdEhdQxeztnYgJ6vH9sKMyO1q525CbEHoSmx5423PO7j9xyJkTRAaeUCTerba5QLGWqClshWulzYkJRzCEPLeEXRZQCdTJXlrisCL0WoI1mo4Efgvsx7B/AgO6dnelJFJ38zxbXOoAM7HAnGgyCPA+0dmbngiaHcGn3oCShNWz6+KnuMO/tsVB8wTNoJRTcMIqClGSa1YXP8zdMgf5peIX9+p56fNHP5Lsh1+D06rqszFWRQNXI9vycZJyOwXsgzRO2jI2KmWWjc2jruryE2BULhxp49Tj1NpzfKOmh3dkMj+62ekbLW6//AT9C+HuaAwAA';<br/>var ticketData = '{"ed":"20170121 09:44:01","fs":[{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"003","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"005","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"004","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"007","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"008","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"026","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"033","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"034","oids":["0"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"035","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"037","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"038","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"041","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"042","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"047","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"046","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"048","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"051","oids":["1"]},{"usg":[1,1,1,1,1,1,1],"act":0,"fid":"053","oids":["4"]}],"qty":1,"sd":"20161021 09:44:01","cd":"72016102116762039687"}';<br/><br/>var han = "就是qwqw上来就发上来快点减肥蓝色的就疯了似的";<br/>// Output to console<br/>var ehan = zip(han);<br/>var s = unzip(b64Data) ;<br/>console.log("unzipped:");<br/>console.log(s);<br/>console.log("中午");<br/>document.write(han+"<br/>");<br/>document.write(s);<br/>var data = zip(ticketData);<br/>console.log("zipped:");<br/>console.log(data);<br/>function unzip(b64Data){<br/>  var strData   = atob(b64Data);<br/>  // Convert binary string to character-number array<br/>  var charData  = strData.split('').map(function(x){return x.charCodeAt(0);});<br/>  // Turn number array into byte-array<br/>  var binData   = new Uint8Array(charData);<br/>  // // unzip<br/>  var data    = pako.inflate(binData);<br/>  // Convert gunzipped byteArray back to ascii string:<br/>  //strData   = String.fromCharCode.apply(null, new Uint16Array(data));<br/>  // Convert gunzipped byteArray back to utf8 string:<br/>  strData = byteToUtf8String(data);<br/>  return strData;<br/>}<br/>function zip(str){<br/>  var binaryString = pako.gzip(str, { to: 'string' });<br/>  return btoa(binaryString);<br/>}<br/><br/><br/>function byteToUtf8String(arr) {<br/>    if(typeof arr === 'string') {<br/>        return arr;<br/>    }<br/>    var str = '',<br/>        _arr = arr;<br/>    for(var i = 0; i < _arr.length; i++) {<br/>        var one = _arr[i].toString(2),<br/>           v = one.match(/^1+?(?=0)/);<br/>        if(v && one.length == 8) {<br/>            var bytesLength = v[0].length;<br/>            var store = _arr[i].toString(2).slice(7 - bytesLength);<br/>            for(var st = 1; st < bytesLength; st++) {<br/>                store += _arr[st + i].toString(2).slice(2);<br/>            }<br/>            str += String.fromCharCode(parseInt(store, 2));<br/>           i += bytesLength - 1;<br/>       } else {<br/>            str += String.fromCharCode(_arr[i]);<br/>        }<br/>    }<br/>    return str;<br/>}<br/></script><br/><br/>=========<br/></body><br/></html><br/><br/></p> | ||