2016-09-30 50 views
0

我想編寫C++代碼來創建一個HDF5數據集與第三方過濾器列在這裏:「https://support.hdfgroup.org/services/contributions.html」。我創建了一個快速的過濾器函數,可以使用snappy庫函數來壓縮以及解壓縮數據。我能夠用快速的過濾器進行書寫,並從中讀取,沒有任何問題。但是,當我嘗試通過h5dump讀取數據時,即使使用正確的過濾器標識(snappy爲32003),我也沒有收到任何輸出。HDF5 C++與第三方過濾器

我猜測問題是h5dump無法訪問我的過濾功能。有沒有辦法解決它?我可以以某種方式創建一個庫並告訴h5dump從中獲取函數嗎?另外,由於過濾器已經註冊到hdfgroup,我想我可以假設已經有一個h5dump可以讀取的過濾函數的現有實現。我可以在我的C++代碼中使用它來保持一致性嗎?

回答

0

是的,自HDF5版本1.8.11以來,您可以使用[dynamic loaded filters] (https://support.hdfgroup.org/HDF5/doc/Advanced/DynamicallyLoadedFilters/HDF5DynamicallyLoadedFilters.pdf)。
您基本上需要創建一個過濾器函數的共享庫,並將它放到特定文件夾(/usr/local/hdf5/lib/plugin)或通過HDF5_PLUGIN_PATH指定文件夾,以便HDF5庫可用。

作爲一個例子,你可以看看h5py回購中的lzf filter

另外看看Blosc這是一個元壓縮機的各種壓縮算法,包括snappy。