2017-05-24 137 views
0

我使用下面的代码来解压缩即将通过socket.io到达的数据。java.io.IOException:未知格式

当解压缩已经以压缩格式发送的数据时,下面的代码很有效。 (从Node.js发送的伪数据:<Buffer a8 b2 ...>

但是,当解压已经在JSONArray中发送的数据时,我得到了java.io.IOException: unknown format错误。 (伪它从Node.js的发送的数据:[<Buffer a8 b2 ..>, <Buffer c4 f0 ..>]

mSocket.on("fired", new Emitter.Listener() { 
    @Override 
    public void call(final Object... args) { 
     JSONArray compressedDataArray = (JSONArray) args[0]; 
     byte[] compressedData = compressedDataArray.getString(0).toString().getBytes(); 
     String unzipped = new String(decompress(compressedData)); 
     Log.v("SAMPLE_TAG", "unzipped: " + unzipped) // LOGGING THE RESULT 
    } 
}) 


public byte[] decompress(byte[] data) throws IOException { 
    ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream(); 
    GZIPInputStream gzipIS = new GZIPInputStream(new ByteArrayInputStream(data)); 

    byte[] buffer = new byte[1024]; 

    int len; 
    while ((len = gzipIS.read(buffer)) > 0) { 
     byteArrayOS.write(buffer, 0, len); 
    } 

    byteArrayOS.close(); 
    gzipIS.close(); 

    return byteArrayOS.toByteArray(); 
    } 

是否有任何机会,以解决这个问题?

+0

解压缩未压缩的JSONArray的原因是什么? – andih

+0

我已经在Redis上压缩数据。在某些情况下,我必须将多个压缩数据返回给用户。因此,我将压缩数据添加到数组中然后发送。 – efkan

+0

另一种说法'compressedDataArray.getString(0).toString()'最后一个'toString()'似乎是多余的。 'getString(index)'已经返回一个'String' – andih

回答

0

我已经改变线下解决这个问题:

byte[] compressedData = compressedDataArray.getString(0).toString().getBytes(); 

改变:

byte[] compressedData = (byte[]) compressedDataArray.get(0); 

然后,它的工作原理。