2017-09-27 64 views
0

我正在尝试从他们的网站HDF5的Java示例。HDF5没有写入所有数据到文件

我试过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 我只是好奇,如果我错过了一些东西,当我设置时,或错过了什么,当我正在读它。

谢谢。

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

回答

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