2017-09-27 6 views
0

自分のウェブサイトからHDF5のJavaの例を試しています。 HDF5がファイルにすべてのデータを書き込んでいない

私は私は1行が書き込まれていることが判明https://support.hdfgroup.org/ftp/HDF5/current/src/unpacked/java/examples/datatypes/H5Ex_T_Bit.java

bitfield datatype

例を試みました。残りは書かれていません。

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を作成するときは、キーワードH5T_STD_B8BEを使用してbitfieldタイプを作成しています。これは、標準ビットデータ型であり、このコードではビッグエンディアンの表記で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

にも更新してください
関連する問題