HDF5没有将所有数据写入文件

时间:2017-09-27 00:53:49

标签: java hdf5

我正在从他们的网站上试用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中检查文件时,数据填写的位置不正确。

enter image description here 我很好奇,如果我在设置时错过了什么,或者在我阅读时错过了什么。

感谢。

我很确定如果我花更多时间,我会找出原因。我只是想知道是否有人在他们的帽子顶部有答案。

1 个答案:

答案 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