要求是服务器传送的输出流 有定长的报文头,报文头里说明了报文内容的长度,这个报文内容发送前使用lz77算法给压缩过。问题是压缩完了后,socket客户端怎么接收呢,lz77的压缩结果解读时要先读一个int型,比如固定是4个字节,然后可能要读一个char,但是这个char型,无法确定是多长啊?gb2312编码的话,他有时是1个字节,有时是2个字节的。UTF-8编码的话,这个字节数则可能会从1个字节到4个字节不等,都是变长的,我如何才能解读被lz77压缩过的流呢?如果不好弄的话,谁能给介绍一个别的对socket流的压缩方法吗?
gzip的话最后能给个例子(socket传输的),网上多见的是直接压缩文件,小弟对java io流操作是在是不熟,谢谢了!
gzip的话最后能给个例子(socket传输的),网上多见的是直接压缩文件,小弟对java io流操作是在是不熟,谢谢了!
GZIPOutputStream gouts = new GZIPOutputStream(outs);
gouts.write("abcdefg".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
客户端代码InputStream ins = socket.getInputStream();
GZIPInputStream gins = new GZIPInputStream(ins);
byte[] rb = new byte[1];
while ((gins.read(rb,0,rb.length)) != -1)
{
System.out.println(new String(rb));
}
报错
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.util.zip.InflaterInputStream.fill(Unknown Source)
at java.util.zip.InflaterInputStream.read(Unknown Source)
at java.util.zip.GZIPInputStream.read(Unknown Source)
at gzip.SocketClientTest.run(SocketClientTest.java:49) 帮我看看吧