我的团队已获得 HDF5 文件可供读取。它们包含带有无符号变量的结构化数据。我和我的团队欣喜若狂地找到了 NetCDF 库,尽管使用的是 NetCDF 数据模型,但它允许纯 Java 读取 HDF5 文件。
没问题——我们认为只需将 NetCDF 数据模型转换为我们想要的任何模型即可。只要我们把数据拿出来。然后我们尝试从 HDF5 文件中读取一个无符号的 32 位整数。我们可以加载HDFView 2.9并看到该变量是一个无符号的32位整数。但是...事实证明NetCDF-3 doesn't support unsigned values !
雪上加霜的是,NetCDF-3 建议您“扩大数据类型”或使用 _Unsigned = "true"
属性(我不是编造的)来指示 32 位应该被视为无符号值。
好吧,如果我从头开始创建 NetCDF 数据,也许这些拼凑会有效,但是如何使用 NetCDF 检测现有 HDF5 文件中的 32 位值应解释为无符号?
更新:显然NetCDF-4 does support unsigned data types 。因此这就引出了一个问题:如何确定 NetCDF Java 库中的值是否有符号?”我在 ucar.ma2.DataType
中没有看到任何无符号类型。
最佳答案
是的,您可以查找 _Unsigned = "true"属性,或者您可以调用 Variable.isUnsigned()。
因为 Java 不支持无符号类型,所以这是一个困难的设计决策。最终,为了提高效率,我们决定不自动扩展类型。因此应用程序必须检查并做正确的事情。查看 ucar.nc2.DataType.unsignedXXX() 辅助方法。
当你读取数据时,你会得到一个Array对象。你可以调用Array.isUnsigned()。此外,像 Array.getDouble() 这样的提取器也会正确转换。
netCDF-Java 库支持称为“通用数据模型”的扩展数据模型,以抽象出文件格式的差异。因此,我们不会受到 netCDF-3 文件格式或数据模型的限制。但我们在Java中
约翰
关于unsigned - 确定 NetCDF 中 HDF5 变量的签名状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16309991/