2017-06-15 74 views
0

我需要在java中放縮一些文本,使用WebSockets將其發送到NodeJS並在NodeJS中充氣。在Java中放氣,在Javascript中膨脹,Z_DATA_ERROR

我使用的Java這個代碼,以使壓縮的UTF-8字符串中的Java

public static String compress(String s) throws UnsupportedEncodingException 
{ 
    Deflater def = new Deflater(9); 
    byte[] sbytes = s.getBytes(StandardCharsets.UTF_8); 
    def.setInput(sbytes); 
    def.finish(); 
    byte[] buffer = new byte[sbytes.length]; 
    int n = def.deflate(buffer); 
    return new String(buffer, StandardCharsets.UTF_8); 
      //+ "*" + sbytes.length; 
    //return Base64.encode(buffer); 
} 

而這種代碼在JavaScript中解壓縮

zlib.inflate(new Buffer(message, "utf8"), function(err, data){ 
    if(!err){ 
     console.log(data.toString('utf8')); 
    }else{ 
     console.log(err); 
    } 
}); 

消息是從WebSocket的字符串

在NodeJS中,我得到這個錯誤

{ Error: invalid code lengths set 
    at Inflate.zlibOnError (zlib.js:152:15) errno: -3, code: 'Z_DATA_ERROR' } 

要找到一個問題,我試圖使用base64,它工作正常。

zlib.inflate(new Buffer(message, "base64"), function(err, data){ 
    if(!err){ 
     console.log(data.toString('utf8')); 
    }else{ 
     console.log(err); 
    } 
}); 

此外,我試圖膨脹\ deflate在Java和Javascript字符串。嘗試使用來自Java的utf-8字符串在JavaScript中創建緩衝區時發生了一些奇怪的事情。 UTF-8字符串是相同的,但緩衝區有點不同。順便提一下,緩衝區的開關是一樣的。

更新: 答:使用Base64編碼,而不是UTF-8

回答