解析grib 文件遇到的问题
程序员文章站
2024-03-15 13:27:59
...
之前用的是ucar.grib 解析包,再解析过程中发现 存储的数据每次有 重复数据 = 原始数据*2
原来以为我的代码逻辑有问题后面debug 的时候Grib2Input的getRecords条数始终是原始数据的2倍,所以在便利过程中数据就出现了重复数据,经过仔细盘查后发现自己解决的grib 文件后缀是grib2 但是为什么程序会给我一个2倍条数的数据呢,于是又去翻查API 发现有一项API
input.getEdition(); 这个方法返回grib 文件类型 当执行这句话后getRecords的返回条数就正常了。原以为这个bug被完美解决,但是放上去测试和时候发现解析性能很低,又排查问题发现执行了getEdition 这个方法后 input.scan(false, false); 这个会去全表扫描相当于 这个扫描一次 然后你遍历时候又一次。每次执行都很慢。
最后只能判断girb 类型 然后根据类型自己去做 页数判断,最后解决的方案
原来以为我的代码逻辑有问题后面debug 的时候Grib2Input的getRecords条数始终是原始数据的2倍,所以在便利过程中数据就出现了重复数据,经过仔细盘查后发现自己解决的grib 文件后缀是grib2 但是为什么程序会给我一个2倍条数的数据呢,于是又去翻查API 发现有一项API
RandomAccessFile raf = new RandomAccessFile(file.getPath(), "r"); raf.order(RandomAccessFile.BIG_ENDIAN); Grib2Input input = new Grib2Input(raf); input.getEdition();
input.getEdition(); 这个方法返回grib 文件类型 当执行这句话后getRecords的返回条数就正常了。原以为这个bug被完美解决,但是放上去测试和时候发现解析性能很低,又排查问题发现执行了getEdition 这个方法后 input.scan(false, false); 这个会去全表扫描相当于 这个扫描一次 然后你遍历时候又一次。每次执行都很慢。
最后只能判断girb 类型 然后根据类型自己去做 页数判断,最后解决的方案
上一篇: 解决一个页面显示问题