gpt4 book ai didi

java - Java/Scala 的 Deflator 压缩 BitSet 的性能

转载 作者:行者123 更新时间:2023-11-30 03:51:11 27 4
gpt4 key购买 nike

我有这个使用 Java 的 Deflator/Inflator 的 Scala 代码。

  def compress(bytes: Array[Byte]): Array[Byte] = {
val deflater = new java.util.zip.Deflater
val baos = new ByteArrayOutputStream
val dos = new DeflaterOutputStream(baos, deflater)
dos.write(bytes)
baos.close
dos.finish
dos.close
baos.toByteArray
}

def decompress(bytes: Array[Byte]): String /*Array[Byte]*/ = {
val deflater = new java.util.zip.Inflater()
val baos = new ByteArrayOutputStream(512)
val bytesIn = new ByteArrayInputStream(bytes)
val in = new InflaterInputStream(bytesIn, deflater)
var go = true
while (go) {
val b = in.read
if (b == -1)
go = false
else
baos.write(b)
}
baos.close
in.close
// String(byte[] bytes, Charset charset)
new String(baos.toByteArray, "ASCII")
}

我需要压缩仅设置一位(13 x 8 = 104 位中的第 100 位)的 BitSet。

val bs = new util.BitSet()
bs.set(100)
val ba = bs.toByteArray
val z = gzip.compress(ba)
println(ba.size)
println(ba.mkString(":"))
println(z.size)
println(z.mkString(":"))

我预计尺寸会大幅减小,但结果是我只节省了一个字节。

13
0:0:0:0:0:0:0:0:0:0:0:0:16
12
120:-100:99:96:64:0:1:0:0:29:0:17

这是 Java 的 Deflator 的预期结果吗?有没有更好的压缩机适合这种情况?

最佳答案

Is this expected results for Java's Deflator?

这正是我所期望的。 “deflate”压缩算法是为压缩大文件而设计的。对于小文件(13 字节),编码的开销可能会平衡(甚至超过)所实现的压缩。

Is there any better compressor for this case?

我不希望标准 Java 库支持的任何压缩算法做得更好。如果您希望在微小位图上获得良好的性能,您可能需要根据第一原理设计自定义压缩器。

例如,稀疏位图可以表示为表示已设置位的数字序列(在本例中为字节值),或者表示为表示运行的数字序列连续的 1 或 0。

关于java - Java/Scala 的 Deflator 压缩 BitSet 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24417103/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com