我是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是一个二维整数数组,我对这个数组不感兴趣,但是与文件关联的元数据组。
答案 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。
那么,这可能比你想要的更多信息; ^)