C#读取压缩格式Avro文件出现内容乱码及StackOverflowException异常
C#读取Snappy压缩Avro文件异常解决方案
- 优先升级你使用的
Apache.AvroNuget包到1.11.0及以上稳定版本,低于该版本存在Snappy压缩解码的已知栈溢出Bug,会直接导致首条记录乱码、读取第二条记录时触发StackOverflowException异常。 - 安装Snappy解码依赖:官方Avro库默认不携带Snappy解码器,你需要额外安装
Snappy.NetNuget包,同时确保运行环境对应的Snappy原生库和程序架构(x86/x64/Arm)匹配,Windows/Linux/macOS对应的原生二进制版本要对应操作系统版本。 - 可通过读取器内置方法验证解码器是否正确加载,参考修改后的读取代码:
using Avro; using Avro.File; using Avro.Generic; // 自动适配文件压缩格式读取 using (var reader = DataFileReader<GenericRecord>.OpenReader(path)) { // 输出当前文件使用的压缩编码,正常识别Snappy压缩文件时会输出snappy,输出null说明解码器未正确加载 Console.WriteLine(reader.GetCodec().Name); foreach (var record in reader.NextEntries) { var name = record["username"].ToString(); // 后续业务逻辑 } }
- 若升级依赖后仍存在字段乱码问题,确认你读取使用的Schema和Avro文件内置的Schema一致,Schema字段顺序、类型不匹配也会导致Snappy压缩文件解码后字段值乱码。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

