Netcdf java库用于读取HDf5错误

时间:2015-09-30 11:53:23

标签: java hdf5 netcdf

我是netcdf库的新手,我目前正在使用它从java中的hdf5文件中读取元数据。阅读之后,我认为netcdf对我来说是一个不错的库,所以使用它。

然而,在我尝试读取文件的第一步中,它会抛出错误

LOGGER.debug("Inside Try");
//InputStream fileStream = new FileInputStream(h5File);
                //parser.parse(fileStream, handler, metadata);

  LOGGER.debug("path is :"+ h5File.getPath());
   NetcdfFile hf5File = NetcdfFile.open(h5File.getPath());



    LOGGER.debug("Got NetCdFile");

我假设当我尝试打开它时会出现问题,因为它说:

  

内部尝试   13:42:04.393 [main] DEBUG e.k.n.c.m.e.HDF5MetadataExtractor - 路径为:/var/www/webdav/admin/1151/data/XXXX.h5   13:42:04.495 [主要] DEBUG ucar.nc2.NetcdfFile - 使用IOSP ucar.nc2.iosp.hdf5.H5iosp   13:42:04.544 [main] ERROR ucar.nc2.iosp.hdf5.H5header - shape [0] = 0必须是> 0

我的Hd5f是一个二维整数数组,我对这个数组不感兴趣,但是与文件关联的元数据组。

2 个答案:

答案 0 :(得分:1)

NetCDF-4创建了HDF5文件,这是真的。 HDF5库可以读取NetCDF-4生成的HDF5格式文件,但NetCDF-4无法读取任意HDF5文件。

您在Netcdf-Java中发现了一个错误,或者您有一个奇怪的HDF5文件。你确认这个文件没有以某种方式损坏吗?我会尝试的事情: - 使用C实用程序'ncdump -h'检查标头 - 使用HDF5 C实用程序'h5dump -H'通过HDF5检查文件

如果这两个命令都给出了合理的输出,那么问题可能在于netcdf-java。

答案 1 :(得分:0)

Netcdf-Java是一个纯Java实现,可以读取大多数HDF5文件,详情请参阅:http://www.unidata.ucar.edu/software/thredds/current/netcdf-java/CDM/index.html#HDF5

如果发现失败,请将错误报告(和文件!)提交至netcdf-java@unidata.ucar.edu(必须在此处注册:http://www.unidata.ucar.edu/support/index.html#mailinglists)。但首先请确保您已尝试过最新版本(目前为4.6.3)。

Netcdf-Java可以 netCDF-4文件(它们是HDF5文件)通过JNI接口写入netcdf-4 C库。 HDF5 java库也是JNI接口,除了直接到HDF5 C库。 HDF5 java库无法写入netCDF4文件(除非你真的知道你在做什么),因为HDF5没有实现共享维度,这对于netCDF数据模型至关重要。

对于地球科学,这导致了论证(免责声明:由我)你应该写netCDF-4,而不是直接写HDF5,详见:http://www.unidata.ucar.edu/blogs/developer/en/entry/dimensions_scales

那么,这可能比你想要的更多信息; ^)