HDF5支持为输出数据管道指定各种过滤器,特别是各种压缩算法和Fletcher32校验和。
在数据输入时,HDF5库会自动检测已应用于文件数据的所有过滤器并应用逆过滤器(解压缩),而无需用户执行任何操作。
然而,在广泛的(有些令人困惑的)HDF5 documentation中,我找不到提及在阅读时检测到错误校验和的后果。
我将其标记为c
,fortran
和c++
,因为我很乐意为这两种API提供答案。
答案 0 :(得分:1)
根本没有在文档中提到,但Fletcher32过滤器的这个design spec表示用户可以提供回调函数来处理失败(即错误的校验和)。如果没有提供回调函数,
如果启用了错误检测代码并且在数据中发现错误,则写入和读取过程将失败。
这意味着H5Dread
的返回值,例如,将是负数。
应用Fletcher32过滤器后(例如H5Pset_fletcher32
),您可以使用H5Pset_filter_callback
设置回调。回调函数必须匹配原型:
typedef H5Z_cb_return_t (H5Z_filter_func_t) (H5Z_filter_t filter_id, void *buf, size_t buf_size, void *op_data)
并返回H5Z_CB_FAIL
或H5Z_CB_CONT
。这样,您可以准确指定校验和失败时会发生什么。
在design spec的附录中有一个非常难看的例子,说明了如何使用这一切。