我想用javascript压缩大型JSON对象,并用java解压它

我想用javascript压缩大型JSON对象,并用java解压它,javascript,java,compression,Javascript,Java,Compression,我想用javascript压缩大型JSON对象,并用java解压它。支持这一点的最佳压缩算法是什么 继续讲下去,我试图使用gzip,但遇到了这个问题 “我在客户端使用javascript,在服务器端使用Java Jboss Resteasy。我尝试了你的方法,但它不起作用。我使用javascript中的zlib库使用Gzip进行压缩,并使用内容编码作为Gzip,还使用Jboss服务器端的Gzip注释来自动解压缩。它不起作用。而且,我尝试使用InputStreamReader在java中解压,它抛

我想用javascript压缩大型JSON对象,并用java解压它。支持这一点的最佳压缩算法是什么

继续讲下去,我试图使用gzip,但遇到了这个问题


“我在客户端使用javascript,在服务器端使用Java Jboss Resteasy。我尝试了你的方法,但它不起作用。我使用javascript中的zlib库使用Gzip进行压缩,并使用内容编码作为Gzip,还使用Jboss服务器端的Gzip注释来自动解压缩。它不起作用。而且,我尝试使用InputStreamReader在java中解压,它抛出了“数据不是Gzip格式”错误。你能在这里帮助我吗?如果可能的话,你能粘贴一个相同的示例代码吗

Javascript代码

 zlib.gzip(JSON.stringify($scope.jsonCompressCheck),function(err, buffer) {
            if (!err) {
              console.log("USing gzip: ");
              console.log("Byte Length: "+Buffer.byteLength(buffer));
              console.log(sizeof(buffer));

             $scope.compressed = buffer;
             var buf2 = Buffer.from(JSON.stringify($scope.jsonCompressCheck));

        $http.post(ATS_URL + ATS_INSTANCE + '/rest/private/decompress/' + clientName + '/gzipdecompress', ($scope.compressed), {

            contentType: 'application/json',
            contentEncoding: 'gzip'

        }).success(function (data, status, headers) {

            console.log("Output Response :- "+data+" Headers: "+headers+"  status: "+status);

        }).error(function (reason) {

            console.log(" Error reason "+reason);
        });
Java代码:Jboss RestEasy 端点

@POST @NoCache
@ApiOperation(value = "Decompress Given Compressed Json object Using Gzip",
                    response = ElasticSearchResults.class, position = 0)
@Path("/{client}/gzipdecompress")
public String gzipJsonDecompress(
        @ApiParam(value = "This required field should be the client name as defined in the datasources.", required = true)
        @PathParam("client") String client,
        @GZIP byte[] compressedObject) throws ATSException {
     return decompressService.gzipJsonDecompress(client,compressedObject);
}
实现代码

 public String gzipJsonDecompress(String client,byte[] compressedObject)throws ATSException{

    validateDomain(client);

    try
    {    InputStream inputStream = new 
         ByteArrayInputStream(compressedObject);
        GZIPInputStream gzipInput = new GZIPInputStream(inputStream); //Not working here  
         ....

最合适的压缩可能是GZip。您可以上载使用GZip压缩的内容,并将服务器设置为处理内容编码头,以便在服务器端自动解压缩。请查看以下链接。

**将普通JSON对象压缩为LZW字符串:**
var lzwString=JSONC.pack(json);
**使用java解压:**
字符串输入=BinaryStdIn.readString();
TST st=新的TST();
对于(int i=0;i0){
字符串s=st.longestprifixof(输入);//查找与s匹配的最大前缀。
BinaryStdOut.write(st.get(s),W);//打印s的编码。
int t=s.长度();
if(t
我的客户端是javascript,服务器端是Java Jboss Resteasy。我尝试了你的方法,但它不起作用。我使用javascript中的zlib库使用Gzip进行压缩,并使用内容编码作为Gzip,Jboss服务器端的Gzip注释自动解压缩。它不起作用。此外,我尝试使用InputStreamReader进行反编译在java中压缩,它抛出了“数据不是Gzip格式”错误。你能在这里帮助我吗?如果可能的话,你能粘贴一个相同的示例代码吗。
**Compress a normal JSON object as a LZW string:**

var lzwString = JSONC.pack( json );

**Decompress using java:**
String input = BinaryStdIn.readString();
TST<Integer> st = new TST<Integer>();
for (int i = 0; i < R; i++)
     st.put("" + (char) i, i);
int code = R+1;  // R is codeword for EOF

while (input.length() > 0) {
String s = st.longestPrefixOf(input);  // Find max prefix match s.
BinaryStdOut.write(st.get(s), W);      // Print s's encoding.
int t = s.length();
if (t < input.length() && code < L)    // Add s to symbol table.
    st.put(input.substring(0, t + 1), code++);
    input = input.substring(t);            // Scan past s in input.
}
BinaryStdOut.write(R, W);
BinaryStdOut.close();