我正在从他们的网站上试用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
中检查文件时,数据填写的位置不正确。
我很好奇,如果我在设置时错过了什么,或者在我阅读时错过了什么。
感谢。
我很确定如果我花更多时间,我会找出原因。我只是想知道是否有人在他们的帽子顶部有答案。
答案 0 :(得分:0)
确定。就像我提到的那样,我花了一些时间后发现了这个问题。
我假设代码没有错误,因为这是来自官方网站。显然不是。
当他们创建dataset
时,他们正在为bitfield
类型创建关键字H5T_STD_B8BE
。它表示标准位数据类型,在此代码中将有8位带有Big Endian 表示法。
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