HDF5没有将所有数据写入文件
Posted
技术标签:
【中文标题】HDF5没有将所有数据写入文件【英文标题】:HDF5 not writing all the data to the file 【发布时间】:2018-03-08 08:24:44 【问题描述】:我正在他们的网站上试用 HDF5 的 Java 示例。
我尝试了bitfield datatype
示例https://support.hdfgroup.org/ftp/HDF5/current/src/unpacked/java/examples/datatypes/H5Ex_T_Bit.java
我发现只写了第一行。其余的就不写了。
我将4x8
数组的原始大小更改为5x9
,只写入了第1行和第2行的3个值。
original array:
0x0000001C, 0x0000001D, 0x0000001E, 0x0000001F, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024,
0x00000025, 0x00000026, 0x00000027, 0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002C, 0x0000002D,
0x0000002E, 0x0000002F, 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036,
0x00000037, 0x00000038, 0x00000039, 0x0000003A, 0x0000003B, 0x0000003C, 0x0000003D, 0x0000003E, 0x0000003F,
0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000047, 0x00000048,
Read from HDF5 file
0x0000001C, 0x0000001D, 0x0000001E, 0x0000001F, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024,
0x00000025, 0x00000026, 0x00000027, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
当我检查HDFView
中的文件时,数据填写在错误的地方。
我只是好奇我是否在设置时遗漏了什么,或者在阅读时遗漏了什么。
谢谢。
我很确定如果我花更多的时间,我会找出原因。我只是想知道是否有人在他们的帽子顶部有答案。
【问题讨论】:
【参考方案1】:好的。正如我提到的,我花了一些时间后发现了这个问题。
我假设代码没有错误,因为这是来自官方网站。显然不是。
当他们创建dataset
时,他们正在为bitfield
类型创建关键字H5T_STD_B8BE
。这意味着 标准位数据类型,在此代码中将具有 8 位大端符号。
dataset_id = H5.H5Dcreate(file_id, DATASETNAME,
HDF5Constants.H5T_STD_B8BE, dataspace_id,
HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
当他们创建要写入H5
文件的样本数据时,他们创建了一个整数数组。 int[][] dset_data = new int[DIM0][DIM1];
由于 int
占用 32 位,每个值在 H5
文件中占用 4 个空格。
只需更改byte[][] dset_data = new byte[DIM0][DIM1];
即可确保所有内容都正确写入。
从文件中读取时,还要更新指针数组类型为byte
【讨论】:
以上是关于HDF5没有将所有数据写入文件的主要内容,如果未能解决你的问题,请参考以下文章
将浮点数组写入和附加到 C++ 中 hdf5 文件中的唯一数据集
通过MATLAB将矩阵数据写入HDF5文件中的每个数据类型成员
如何在 C++ 中将 stl::string 写入 HDF5 文件