【问题标题】:Reading/Writing multiple datasets to a single HDF5 file将多个数据集读/写到单个 HDF5 文件
【发布时间】: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 行。为什么无法在组下创建不透明数据集?

【问题讨论】:

    标签: java hdf5


    【解决方案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 用户讨论列表 )。他们通常会快速响应此类问题。
    猜你喜欢
    • 2021-07-05
    • 2016-01-02
    • 2017-10-02
    • 2017-11-03
    • 2016-06-02
    • 2018-03-18
    • 2023-03-24
    • 2023-02-24
    • 1970-01-01
    相关资源
    最近更新 更多