public class GorillaValueDecompressor
extends java.lang.Object
복원 과정에서는 압축 시에 사용된 비트 단위의 정보를 정확히 해석해야 하며, 잘못된 비트 패딩으로 인해 잘못된 값이 복원될 수 있다. 이를 방지하기 위해 압축된 데이터의 row 개수를 정확히 사용하여 복원해야 한다.
이 클래스는 객체 생성이 불가능하며, 모든 메서드는 정적(static)으로 제공된다.
Gorilla Compress의 끝 처리 문제: 압축된 데이터가 8비트로 정확히 나누어지지 않을 때, 남은 비트들이 0으로 채워진다. 이는 복원 시 "이전 값과 동일"로 해석될 수 있으며, 실제 데이터보다 더 많은 값이 복원될 수 있다. 이를 방지하기 위해 압축된 데이터의 row 개수를 함께 저장하고, 복원 시 이를 기준으로 데이터를 정확히 복원한다.
| Modifier and Type | Method and Description |
|---|---|
static java.util.List<java.lang.Double> |
decompressDoubleValue(byte[] compressedData,
long size)
이 메서드는 Gorilla 알고리즘을 사용하여 압축된 64비트 부동소수점(Double) 데이터를 복원한다.
|
public static java.util.List<java.lang.Double> decompressDoubleValue(byte[] compressedData,
long size)
throws java.io.IOException
이 메서드는 Gorilla 알고리즘을 사용하여 압축된 64비트 부동소수점(Double) 데이터를 복원한다. 압축된 데이터는 XOR 연산을 통해 이전 값과의 차이점만을 저장하기 때문에, 복원 과정에서 이 XOR 값을 기반으로 원래의 값을 계산한다. 이 과정은 비트 단위로 매우 정밀하게 진행되며, 각 단계에서 저장된 비트 정보를 정확하게 해석해야 한다. 복원된 데이터는 원래의 정수 리스트로 변환되어 반환된다.
복원 과정에서 각 데이터의 선행0비트(leading zeros)와 후행0비트(trailing zeros)를 관리하여 효율적인 복원이 가능하도록 한다. 압축된 데이터는 row 개수를 기반으로 처리되며, 데이터가 8비트로 나누어지지 않는 경우 마지막에 추가된 비트들이 잘못된 복원 결과를 초래하지 않도록 주의해야 한다.
compressedData - 압축된 데이터를 담은 바이트 배열size - 복원할 데이터의 크기 (행 개수)java.io.IOException - 데이터 복원 중 발생할 수 있는 입출력 예외