2017-09-27 4 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으로 변경하고 첫 번째 행과 두 번째 행의 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 유형을 생성합니다. 이것은이 코드에서 Big Endian 표기법으로 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

으로 업데이트하십시오.
관련 문제