java.io.IOException: 未知格式
java.io.IOException: unknown format
我使用下面的代码解压缩通过 socket.io
到达的即将到来的数据。
当解压缩以压缩形式发送的数据时,下面的代码效果很好。 (从 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();
}
有机会解决这个问题吗?
我通过更改以下行解决了这个问题:
byte[] compressedData = compressedDataArray.getString(0).toString().getBytes();
更改为:
byte[] compressedData = (byte[]) compressedDataArray.get(0);
然后就可以了。
我使用下面的代码解压缩通过 socket.io
到达的即将到来的数据。
当解压缩以压缩形式发送的数据时,下面的代码效果很好。 (从 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();
}
有机会解决这个问题吗?
我通过更改以下行解决了这个问题:
byte[] compressedData = compressedDataArray.getString(0).toString().getBytes();
更改为:
byte[] compressedData = (byte[]) compressedDataArray.get(0);
然后就可以了。