场景
我正在使用sendRequest
函数通过套接字连接从WebServer获取对Android App发出的特定请求的响应。
gzip压缩数据从WebServer发送到我的Android应用程序。但是我无法在Android上解压缩gzip数据。
如果WebServer不传递gzip数据,则args[0]
返回我的程序所需的期望输出。
否则,当从Web服务器传递gzip数据时,我会将此...во и ��ргуме...
作为Android端args[0]
的值。
我无法获得finalSting
我的gradle文件:
implementation ('io.socket:socket.io-client:1.0.0')
问题
如何在socket.emit
的确认中解压缩gzip?
他们还有其他方法可以根据我的senario解压缩gzip吗?
Socket.IO 1.4.0及更高版本具有自动压缩之类的功能,Android也是如此吗?
在以下代码中,我无法获取值 finalSting
public void sendRequest(JSONObject request, final SocketCallBack callback) {
if( !socket.connected() )
{
if( callback != null )
callback.doAction("");
return;
}
socket.emit("socket_request", request, new Ack() {
@Override
public void call(Object... args) {
Log.d(Const.HOTLYNC, "Send ACK = " + args.toString());
if( args != null && args.length > 0 )
{
if( args[0] instanceof String && callback != null ) {
try {
String finalSting = decompress(convertToBytes(args[0]));
callback.doAction(finalSting);
} catch (IOException e) {
e.printStackTrace();
}
}
}
else
{
if( callback != null )
callback.doAction("");
}
}
});
}
@TargetApi(Build.VERSION_CODES.KITKAT)
private byte[] convertToBytes(Object object) throws IOException {
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos)) {
out.writeObject(object);
return bos.toByteArray();
}
}
public static String decompress(byte[] compressed) throws IOException {
final int BUFFER_SIZE = 32;
ByteArrayInputStream is = new ByteArrayInputStream(compressed);
GZIPInputStream gis = new GZIPInputStream(is, BUFFER_SIZE);
byte[] data = new byte[BUFFER_SIZE];
int bytesRead=0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((bytesRead = gis.read(data)) != -1) {
baos.write(data, 0, bytesRead);
}
gis.close();
is.close();
return baos.toString("UTF-8");
}