2017-09-27 78 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