我最近压缩了一些文件,我注意到base64编码的数据似乎压缩得非常糟糕.这是一个例子:
xz -9:13,2 MiB / 429,7 MiB = 0,031 4,9 MiB/s 1:28base64它并压缩通过xz -9:26,7 MiB / 580,4 MiB = 0,046 2,6 MiB/s 3:47base64原始压缩的xz文件:17,8 MiB几乎没有时间=预期1.33x的大小增加所以可以观察到的是:
怎么会这样?Base64是一种无损,可逆的算法,为什么它会如此影响压缩呢?(我也试过gzip,结果相似).
我知道base64然后压缩文件是没有意义的,但大多数时候一个人无法控制输入文件,我会想到,因为实际的信息密度(或任何它被称为base64编码文件的几乎与非编码版本相同,因此可以类似地压缩.
我有这个(貌似)无辜的代码(在这里简化为这个JUnit测试用例):
import static org.hamcrest.Matchers.instanceOf;
import static org.junit.Assert.assertThat;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.function.Supplier;
import org.junit.Test;
public class GenericsTest {
private static boolean doFail;
private static Map<String, Number> createMap() {
if (doFail) {
throw new IllegalArgumentException();
}
return new HashMap<>();
}
public static <T> T get(final Callable<T> _valueCreator, final Supplier<T> _errorValue) {
try {
return _valueCreator.call();
} catch (final Exception e) {
return _errorValue.get();
}
}
public static Map<String, Number> getCachedMap() {
return get(GenericsTest::createMap, Collections::emptyMap);
}
@Test …Run Code Online (Sandbox Code Playgroud)