압축. 이 모드는 작업 모드 옵션을 지정하지 않을 때 기본 작업 모드이며, 명령 이름(예: unlz4은 –압축 해제를 의미함)이나 입력 파일 이름(예: 파일 확장명 .lz4은 –compressby를 의미함)에서 다른 작업 모드가 암시되지 않습니다. 기본값)을 참조하십시오. -z는 이미 압축 된 .lz4 파일의 압축을 강제로 사용할 수도 있습니다. 경우에 따라 일부 옵션은 짧은 명령 -x 또는 긴 명령 –long-word를 사용하여 표현할 수 있습니다. 짧은 명령을 함께 연결할 수 있습니다. 예를 들어 -d-c는 -dc와 동일합니다. 긴 명령은 연결될 수 없습니다. 그들은 명확하게 공간에 의해 분리되어야한다.

.lz4 파일을 있는 것처럼 연결할 수 있습니다. lz4는 이러한 파일이 단일 .lz4 파일인 것처럼 압축을 풀것입니다. 예를 들어 LZ4는 합리적인 압축 비율을 가진 정말 빠른 압축 알고리즘이지만 불행히도 작동 방식에 대한 문서가 제한되어 있습니다. 유일한 설명 (사양, 설명이 아님)은 저자의 블로그에서 찾을 수 있지만 설명과 비공식 사양에 대한 설명이 적다고 생각합니다. 프레임 바인딩을 사용하는 가장 간단한 방법은 압축() 및 압축 해제() 함수를 사용하는 것입니다: lz4는 gzip(1)과 유사하지만 동일하지 는 않은 명령줄 구문을 지원합니다. 차이점은 다음과 같습니다 : b#에서 e#(포함)에 이르는 여러 압축 수준을 벤치마크하는 권장 바인딩은 LZ4 프레임 형식 바인딩입니다. block_linked 인수는 블록 연결 압축을 사용할지 여부를 지정합니다. True인 경우 압축 프로세스는 순차 적 블록 간의 데이터를 사용하여 압축 비율을 향상시키고 특히 작은 블록의 경우 압축 비율을 개선합니다. 기본값은 True입니다. 당신이 알 수 있듯이, 사전은 선형으로 성장한다.

따라서 메모리를 트리밍하여 가끔씩 메모리를 줄이는 것이 중요합니다. 일부 항목이 자주 사용될 수 있으므로 첫 번째(또는 마지막) (N) 항목을 트리밍하는 것만으로는 비효율적입니다. 대신 캐시 교체 정책을 사용해야 합니다. 사전이 채워진 경우 캐시 교체 정책에 따라 교체할 일치 항목이 결정됩니다. 나는 PLRU LZ4 압축에 대한 CRP의 좋은 선택을 발견했습니다. 모든 블록은 두 개의 4비트 필드로 구분되는 1바이트 토큰으로 시작합니다. 여기서 압축 컨텍스트는 먼저 LZ4 라이브러리에 대한 호출에서 상태를 유지하는 데 사용됩니다. 이것은 불투명한 PyCapsule 오브젝트입니다. compress_begin())는 새 프레임을 시작하고 프레임 헤더를 반환합니다. 압축_chunk())는 입력 데이터를 압축하고 압축된 데이터를 반환합니다.

compress_flush()는 프레임을 종료하고 프레임 끝 마커를 반환합니다. 이러한 함수에서 반환되는 데이터는 압축 프레임을 형성하기 위해 분류됩니다. 먼저 16비트 의 작은 엔디안 정수를 읽습니다. 이렇게 하면 소위 오프셋(O)를 정의합니다. 오프셋이 복사된 버퍼의 시작 위치가 아님을 이해하는 것이 중요합니다. 이 시작점은 (l – O)로 계산되며(l)는 이미 디코딩된 바이트 수입니다. (O)가 16비트이기 때문에 필요한 커서의 주소 지정 가능(2^{16} + 4) 바이트 이내와 일부 길이 이상(키가 작을수록 블록 수준 압축 비율이 더 나빠)과 같은 추가 규칙을 추가해야 합니다. .

lz4는 gzip(1)과 유사하지만 동일하지 않은 명령줄 구문을 지원합니다. 차이점은 다음과 같습니다 : lz4 는 원본 파일을 유지합니다 lz4는 기본적으로 단일 파일을 압축합니다 (여러 파일에 대한 사용 -m) lz4 file1 file2 는 파일2로 압축file1을 입력하지 않은 경우 대상 이름이 제공되지 않는 경우 .lz4 접미사를 수신합니다. stdout이 콘솔이 아닌 경우 stdout이 제공되면 출력 (예 : 무음 -c) 따라서 lz4 파일 > / dev / null은 file.lz4 lz4 파일을 생성하지 않습니다 압축 중 실시간 통계를 보여줍니다 (사용 -q 를 침묵) 기본 동작은 옵트인에 의해 수정 될 수 있습니다 아래에 설명된 명령.