当使用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积极使用(读取,添加和压缩和解)。