用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
就是用那种死锁的写法,作者怎么都不测试一下呢。。。