压缩TreeSet对象时的Java GZipOutputStream StackOverflowError

时间:2014-08-15 23:57:23

标签: java collections treeset stack-overflow gzipoutputstream

当使用GZipOutputStream将TreeSet对象压缩为byte []数组时,我遇到了一个奇怪的StackOverflowError。

执行压缩的代码非常标准:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
GZIPOutputStream zip = new GZIPOutputStream(baos);
ObjectOutputStream oos = new ObjectOutputStream(new BuifferedOutputStream(zip));
oos.writeObject(this);
oos.close();
zip.close();
baos.close();

TreeSet对象包含一组数据对象,这些对象中的字段是平面的,即没有地图/列表/集合(它们可能有一些集合字段,但它们是无效的,因为TreeSet是压缩的),只是数字,布尔和字符串。

我在一些帖子中读到GZIPOutputStream在处理复杂的地图结构时遇到这个问题,但没有太多细节。

有谁知道哪种地图会因为这种堆栈溢出错误而破坏GZIP?我正在使用的TreeSets特别大......错误偶尔会出现,我无法自行生成它,它只会在生产中运行时才会出现这些TreeSet积极使用(读取,添加和压缩和解)。

0 个答案:

没有答案