将多个数据集读/写到单个 HDF5 文件
Posted
技术标签:
【中文标题】将多个数据集读/写到单个 HDF5 文件【英文标题】:Reading/Writing multiple datasets to a single HDF5 file 【发布时间】:2012-03-26 17:55:22 【问题描述】:我们如何将多个数据集写入单个 HDF5 文件? 同样,如何从同一个文件中重新读取这些数据集?
我正在考虑使用组创建多个数据集。下面的代码试图在组下使用 ScalarDS 创建一个不透明的数据类型,但它会引发异常。
public static void createFile(Message message)throws Exception
// retrieve an instance of H5File
FileFormat fileFormat = FileFormat.getFileFormat(FileFormat.FILE_TYPE_HDF5);
if (fileFormat == null)
System.err.println("Cannot find HDF5 FileFormat.");
return;
// create a new file with a given file name.
H5File testFile = (H5File)fileFormat.create(fname);
if (testFile == null)
System.err.println("Failed to create file:"+fname);
return;
// open the file and retrieve the root group
testFile.open();
Group root = (Group)((javax.swing.tree.DefaultMutableTreeNode)testFile.getRootNode()).getUserObject();
Group g1 = testFile.createGroup("byte arrays", root);
// obtaining the serialized object
byte[] b =serializer.serialize(message);
int len=b.length;
byte[] dset_data = new byte[len+1];
// Initialize data.
int indx=0;
for (int jndx = 0; jndx < len ; jndx++)
dset_data[jndx] = b[jndx];
dset_data[len] = (byte)(indx) ;
// create opaque dataset ---- error here…
Datatype dtype = testFile.createDatatype(
Datatype.CLASS_OPAQUE, (len*4), Datatype.NATIVE, Datatype.NATIVE);
Dataset dataset = testFile.createScalarDS
("byte array", g1, dtype, dims1D, null, null, 0, dset_data);//error shown in this line
// close file resource
testFile.close();
我不明白为什么它会给我 HDF5 库异常并指向 createScalarDS 行。为什么无法在组下创建不透明数据集?
【问题讨论】:
【参考方案1】:默认配置不允许,但您可以查看Parallel HDF5,它支持通过 MPI 进行并行写入访问。 但是,这仅适用于未压缩的数据。
【讨论】:
Hii Umit...谢谢您的帮助,但确实存在一个问题.. java 不支持并行 HDF5.. 是否可以在一个组中写入多个数据集?这可以动态完成吗? @kuki 是的 Java 包装器不支持并行 HDF5。可以将多个数据集写入一个组,但只能从一个线程写入 HDF5 文件。但是,您可以从一个线程写入并同时从任何其他线程读取。动态是什么意思? 好吧,在我的程序代码中,我从另一个类中调用这个'public static void rec(Message message)';其中 message 是稍后序列化的 Message 类的对象。消息实际上是用户输入的 JMS 消息。我希望将用户发送的所有消息放到一个 HDF5 文件中,但在不同的不透明数据集下,每条消息都存储在一个数据集中。因为我不知道用户会输入多少个单词,所以我需要全部这些数据集的创建将在运行时发生,具体取决于消息对象包含的字数。 @kuki:我没有使用 HDF5 的 JAVA 包装器,但我建议将您的例外发布到 hdf5 邮件列表(HDF 用户讨论列表以上是关于将多个数据集读/写到单个 HDF5 文件的主要内容,如果未能解决你的问题,请参考以下文章
将浮点数组写入和附加到 C++ 中 hdf5 文件中的唯一数据集