diff options
author | Yann Collet <cyan@fb.com> | 2019-04-11 22:19:48 (GMT) |
---|---|---|
committer | Yann Collet <cyan@fb.com> | 2019-04-11 22:20:46 (GMT) |
commit | bcb26565a732062759a2428e167e27ad3c2f6e96 (patch) | |
tree | 7b192662cba336b688b23ea04fcd6f48cbb3fc48 /lib | |
parent | 8d76c8a44a15cc7c0c1f345ba750e44edac7abb7 (diff) | |
download | lz4-bcb26565a732062759a2428e167e27ad3c2f6e96.zip lz4-bcb26565a732062759a2428e167e27ad3c2f6e96.tar.gz lz4-bcb26565a732062759a2428e167e27ad3c2f6e96.tar.bz2 |
improved documentation for LZ4 dictionary compression
Diffstat (limited to 'lib')
-rw-r--r-- | lib/lz4.h | 11 | ||||
-rw-r--r-- | lib/lz4frame.h | 20 |
2 files changed, 27 insertions, 4 deletions
@@ -263,10 +263,15 @@ LZ4LIB_API int LZ4_freeStream (LZ4_stream_t* streamPtr); LZ4LIB_API void LZ4_resetStream_fast (LZ4_stream_t* streamPtr); /*! LZ4_loadDict() : - * Use this function to load a static dictionary into LZ4_stream_t. - * Any previous data will be forgotten, only 'dictionary' will remain in memory. + * Use this function to reference a static dictionary into LZ4_stream_t. + * The dictionary must remain available during compression. + * LZ4_loadDict() triggers a reset, so any previous data will be forgotten. + * The same dictionary will have to be loaded on decompression side for successful decoding. + * Dictionary are useful for better compression of small data (KB range). + * While LZ4 accept any input as dictionary, + * results are generally better when using Zstandard's Dictionary Builder. * Loading a size of 0 is allowed, and is the same as reset. - * @return : dictionary size, in bytes (necessarily <= 64 KB) + * @return : loaded dictionary size, in bytes (necessarily <= 64 KB) */ LZ4LIB_API int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize); diff --git a/lib/lz4frame.h b/lib/lz4frame.h index 2ada8b8..5c68628 100644 --- a/lib/lz4frame.h +++ b/lib/lz4frame.h @@ -524,10 +524,28 @@ LZ4FLIB_STATIC_API size_t LZ4F_getBlockSize(unsigned); /********************************** * Bulk processing dictionary API *********************************/ + +/* A Dictionary is useful for the compression of small messages (KB range). + * It dramatically improves compression efficiency. + * + * LZ4 can ingest any input as dictionary, though only the last 64 KB are useful. + * Best results are generally achieved by using Zstandard's Dictionary Builder + * to generate a high-quality dictionary from a set of samples. + * + * Loading a dictionary has a cost, since it involves construction of tables. + * The Bulk processing dictionary API makes it possible to share this cost + * over an arbitrary number of compression jobs, even concurrently, + * markedly improving compression latency for these cases. + * + * The same dictionary will have to be used on the decompression side + * for decoding to be successful. + * To help identify the correct dictionary at decoding stage, + * the frame header allows optional embedding of a dictID field. + */ typedef struct LZ4F_CDict_s LZ4F_CDict; /*! LZ4_createCDict() : - * When compressing multiple messages / blocks with the same dictionary, it's recommended to load it just once. + * When compressing multiple messages / blocks using the same dictionary, it's recommended to load it just once. * LZ4_createCDict() will create a digested dictionary, ready to start future compression operations without startup delay. * LZ4_CDict can be created once and shared by multiple threads concurrently, since its usage is read-only. * `dictBuffer` can be released after LZ4_CDict creation, since its content is copied within CDict */ |