用GZIP来压缩socket传输的序列化的类

简介:

  用ObjectOutputStream来序列化类再通过socket传输是方便的网络通信方式。但是一旦数据量较大时,天朝小水管就表示压力很大,压缩数据成了不二的选择。很自然的地想到用GZIPOutputStream来压缩数据,用GZIPInputStream来解压数据。

    原以为这样很简单,问题来了,程序陷入了等待(死锁)。网上搜了一下,发现有人已经遇到这样的问题了

http://topic.csdn.net/t/20040427/18/3014290.html

虽然没有给出答案,但是最后的那个回复给了我启发。原来对GZIPOutputStream flush是不够的,猜测可能是要等到一定的数据量才进行压缩。目标是显然的,就是强制它压缩。看到了GZIPOutputStream有个方法finish(),经测试果然有效。

顺便吐槽下这篇文章,http://www.360doc.com/content/06/0915/14/10610_208147.shtml

就是用那种死锁的写法,作者怎么都不测试一下呢。。。

 



本文转自 dogegg250 51CTO博客,原文链接:http://blog.51cto.com/jianshusoft/766760,如需转载请自行联系原作者

相关文章
|
5天前
muduo源码剖析之Socket类
封装了一个sockfd相关的设置。比较简单,已经编写注释。
18 0
|
5天前
|
存储 算法 Java
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
|
6月前
|
存储 Cloud Native Linux
C++封装了socket通信类
C++封装了socket通信类
|
6月前
|
存储
19.7 Boost Asio 传输序列化数据
序列化和反序列化是指将数据结构或对象转换为一组字节,以便在需要时可以将其存储在磁盘上或通过网络传输,并且可以在需要时重新创建原始对象或数据结构。 序列化是将内存中的对象转换为字节的过程。在序列化期间,对象的状态被编码为一组字节,并可以保存或传输到另一个位置。序列化后的字节可以在之后进行反序列化,以将对象重建为在序列化之前的状态。反序列化则是将字节序列重新转换为对象或数据结构的过程。在反序列化期间,字节被反转回原始对象的状态,以便它可以被使用或操作。
34 0
19.7 Boost Asio 传输序列化数据
|
7月前
|
安全 网络协议 Java
Thread类的用法 && 线程安全 && 多线程代码案例 && 文件操作和 IO && 网络原理初识 &&UDP socket
Thread类的用法 && 线程安全 && 多线程代码案例 && 文件操作和 IO && 网络原理初识 &&UDP socket
42 0
|
5天前
|
网络协议 Java 网络安全
【计算机网络】—— Socket通信编程与传输协议分析
【计算机网络】—— Socket通信编程与传输协议分析
15 0
|
5天前
|
分布式计算 Java 大数据
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
56 0
|
5天前
|
网络协议 Java
Java中如何使用Socket类检测端口是否存在
Java中如何使用Socket类检测端口是否存在
28 4
|
5天前
|
XML 存储 BI
如何把一个 ABAP 类的实例,序列化成 XML 字符串试读版
如何把一个 ABAP 类的实例,序列化成 XML 字符串试读版
19 0
|
5天前
|
缓存 Java 数据库
为什么Bean类要序列化?
为什么Bean类要序列化?
22 0