在使用hyperlab从HDF5文件读取数据时获得异常,如果我设置偏移量非零

本文关键字:如果 异常 设置 偏移量 hyperlab HDF5 数据 读取 文件 | 更新日期: 2023-09-27 18:16:09

这里我试图从hdf5文件读取部分数据。我能够在数据集中写入和读取整个数据,但现在我想读取数据的一部分,我使用' hyperlab '它抛出异常

'H5D.read: 
Failed to read data to data set 5000002 with status -1'

对于相同的条件

现在它给我5000000错误

at line

H5D.read(dataSetIdTO, typeId, memspaceid, filespaceid,
         new H5PropertyListId(new H5P.Template()), new H5Array<int>(readDataBack));

编辑:如果我设置offset[0]=0,那么它可以正常工作

我的代码
//Open hdf5 file
H5FileId fileId = H5F.open("myCSharp.h5", H5F.OpenMode.ACC_RDONLY);
long[] offset = new long[1];
offset[0] = 1;
long[] count = new long[1];
count[0] = 500;
//Open group
H5GroupId groupId = H5G.open(fileId, "GroupName");
// Open the data set.
H5DataSetId dataSetIdTO = H5D.open(groupId, "DataSetName");
// Get space id from our data set
H5DataSpaceId filespaceid = H5D.getSpace(dataSetIdTO);
//Create new space to read hyperslab in memory
H5DataSpaceId memspaceid = H5S.create_simple(1, count);
//select hyperslabs in dataspace
H5S.selectHyperslab(memspaceid, H5S.SelectOperator.SET, offset, count);
H5S.selectHyperslab(filespaceid, H5S.SelectOperator.SET, offset, count);
//array to read data
int[] readDataBack = new int[500];
H5DataTypeId typeId = new H5DataTypeId(H5T.H5Type.NATIVE_INT);
//Read data from dataset 
// * I got Exception here*
H5D.read(dataSetIdTO, typeId, memspaceid, filespaceid,
          new H5PropertyListId(new H5P.Template()), new H5Array<int>(readDataBack));

在使用hyperlab从HDF5文件读取数据时获得异常,如果我设置偏移量非零

经过这么多的努力,我知道为什么会发生这种情况。这里我创建的内存空间等于count,它应该大于给hyperlab的count。

//Create new space to read hyperslab in memory
H5DataSpaceId memspaceid = H5S.create_simple(1, count);

我需要创建一个新的长数组

//delclar long array for memory space dims
long[] memSpaceDims = new long[1];
memSpaceDims[0] = 5001; //it should be greater than count[0]
//Create new space to read hyperslab in memory
H5DataSpaceId memspaceid = H5S.create_simple(1, memSpaceDims);