我将MultiPart
内容发送到我的远程服务器以将其存储在文件系统中。为此我使用Java TCP/IP
协议。为避免网络带宽和TCP输入/输出缓冲存储器,我以GZIP
压缩格式发送数据。但是,我无法解压缩从客户端收到的数据。我有 Unexpected end of ZLIB input stream
例外。由于服务器正在 chunks
中接收数据。
Java代码
客户
OutputStream out = new GZIPOutputStream(sock.getOutputStream());
byte[] dataToSend = FileUtil.readFile(new File("/Users/bharathi/Downloads/programming_in_go.pdf"));
out.write(dataToSend);
服务器
out = new FileOutputStream("/Users/bharathi/Documents/request_trace.log");
InputStream in = new GZIPInputStream(clntSocket.getInputStream());
int totalBytesRead = 0;
int bytesRead;
byte[] buffer = new byte[BUFFER_SIZE];
while ((bytesRead = in.read(buffer)) != -1)
{
out.write(buffer , 0 , bytesRead);
totalBytesRead += bytesRead;
}
有没有解决方案在Socket中以GZIP压缩格式发送数据?
答案 0 :(得分:3)
GZIPOutputStream生成一个GZIP file format
,这意味着另一端必须先接收完整的流(这是一个文件)才能处理它,这就是你的错误的原因。
如果您希望实际进行基于流的数据传输,请删除gzip,然后转到zlib,我相信Zlib compression Using Deflate and Inflate classes in Java会回答如何执行此操作。
答案 1 :(得分:0)
尝试添加:
out.flush();
sock.shutdownOutput();
到您的客户端代码。