用于读取 HDf5 错误的 Netcdf java 库

Posted

技术标签:

【中文标题】用于读取 HDf5 错误的 Netcdf java 库【英文标题】:Netcdf java library for reading HDf5 error 【发布时间】:2015-12-28 04:46:44 【问题描述】:

我是 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] 调试 e.k.n.c.m.e.HDF5MetadataExtractor - 路径为:/var/www/webdav/admin/1151/data/XXXX.h5 13:42:04.495 [main] 调试 ucar.nc2.NetcdfFile - 使用 iosP ucar.nc2.iosp.hdf5.H5iosp 13:42:04.544 [main] 错误 ucar.nc2.iosp.hdf5.H5header - shape[0]=0 必须 > 0

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

谢谢,我想我错过了 NetCDF 库应该用于创建 HDf5 的重要部分。我不确定这是否在我生产 HDf5 时完成。所以很高兴接受这个答案。我将使用 HDF5 java lib。如果我需要读取 HDf5 文件中的自定义元数据文件夹,JHi5 库是否足够好或 Java HDf5 对象包,是否有任何指针? 我对这些库的 java 绑定没有任何第一手经验,抱歉。【参考方案2】:

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 C 库的 JNI 接口写入 netCDF-4 文件(即 HDF5 文件)。 HDF5 java 库也是 JNI 接口,除了直接连接到 HDF5 C 库。 HDF5 java 库无法编写 netCDF4 文件(除非您真的知道自己在做什么),因为 HDF5 不实现共享维度,这对于 netCDF 数据模型至关重要。

对于地球科学,这导致了您应该编写 netCDF-4 而不是直接编写 HDF5 的论点(免责声明:由我),详情请点击此处:http://www.unidata.ucar.edu/blogs/developer/en/entry/dimensions_scales。

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

【讨论】:

以上是关于用于读取 HDf5 错误的 Netcdf java 库的主要内容,如果未能解决你的问题,请参考以下文章

无法读取 NetCDF 结构变量数组子范围

Python、NetCDF4 和 HDF5

在 Windows 上将 NetCDF 转换为 HDF5 的最简单方法是啥

访问 netcdf 文件中嵌套组中的变量(文件格式 HDF5)

在 Java 流中读取 HDF5

我可以从多个进程/线程写入 HDF5 文件吗?