用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,如需转载请自行联系原作者

相关文章
|
7月前
muduo源码剖析之Socket类
封装了一个sockfd相关的设置。比较简单,已经编写注释。
58 0
|
存储 Cloud Native Linux
C++封装了socket通信类
C++封装了socket通信类
|
7月前
|
存储 算法 Java
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
|
安全 网络协议 Java
Thread类的用法 && 线程安全 && 多线程代码案例 && 文件操作和 IO && 网络原理初识 &&UDP socket
Thread类的用法 && 线程安全 && 多线程代码案例 && 文件操作和 IO && 网络原理初识 &&UDP socket
70 0
|
2月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
141 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
2月前
|
JSON 前端开发 数据格式
前端的全栈之路Meteor篇(五):自定义对象序列化的EJSON介绍 - 跨设备的对象传输
EJSON是Meteor框架中扩展了标准JSON的库,支持更多数据类型如`Date`、`Binary`等。它提供了序列化和反序列化功能,使客户端和服务器之间的复杂数据传输更加便捷高效。EJSON还支持自定义对象的定义和传输,通过`EJSON.addType`注册自定义类型,确保数据在两端无缝传递。
|
3月前
|
存储 Java
序列化流 ObjectInputStream 和 ObjectOutputStream 的基本使用【 File类+IO流知识回顾④】
这篇文章介绍了Java中ObjectInputStream和ObjectOutputStream类的基本使用,这两个类用于实现对象的序列化和反序列化。文章解释了序列化的概念、如何通过实现Serializable接口来实现序列化,以及如何使用transient关键字标记不需要序列化的属性。接着,通过示例代码演示了如何使用ObjectOutputStream进行对象的序列化和ObjectInputStream进行反序列化。
序列化流 ObjectInputStream 和 ObjectOutputStream 的基本使用【 File类+IO流知识回顾④】
|
3月前
|
JSON 安全 编译器
扩展类实例的序列化和反序列化
扩展类实例的序列化和反序列化
37 1
|
7月前
|
分布式计算 Java 大数据
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
100 0
|
6月前
|
网络协议
逆向学习网络篇:通过Socket建立连接并传输数据
逆向学习网络篇:通过Socket建立连接并传输数据
61 0