Ich schaute in die link, um zu verstehen, wie lz4 funktioniert. Ich habe den folgenden Test geschrieben. Wir können sehen, dass sinInput2 nicht komprimiert werden kann, da es nur zufällige Daten enthält. Die Größe von sinInput1 ist auf 1/8 reduziert. Ich schätze das liegt daran, dass seine Daten 8 verschiedene Blöcke haben. Bedeutet es, dass lz4 wiederholte Teilstrings finden kann? Gibt es eine Grenze dafür, wie lange ein Teilstring gefunden werden kann?Kann lz4 kontinuierliche wiederholte Teilstrings finden?
#include <string>
#include <iostream>
#include "lz4.h"
#include <stdio.h> /* printf, NULL */
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
#include <math.h>
int main() {
using namespace std;
srand(time(NULL));
double sinInput1[1024];
double sinInput2[1024];
for (int i = 0; i < 1024; ++i) {
sinInput1[i]=sin(i % 128);
sinInput2[i]=sin(i);
}
int inputSize = 1024 * sizeof(double);
cout << "Input size: " << inputSize << endl;
char *compressedData = new char[2 * inputSize];
cout << "Compressed size of sinInput1: " << LZ4_compress_fast((char*)sinInput1, compressedData, inputSize, inputSize*2, 1) << endl;
cout << "Compressed size of sinInput2: " << LZ4_compress_fast((char*)sinInput2, compressedData, inputSize, inputSize*2, 1) << endl;
return 0;
}
Input size: 8192
Compressed size of sinInput1: 1064
Compressed size of sinInput2: 8222