我假设是这样(如@ https://docs.oracle.com/javase/7/docs/api/java/util/zip/Deflater.html所述),但是一些基本测试似乎向我显示了其他情况:
def compress(data: Array[Byte]): Array[Byte] = {
val dis = new DeflaterInputStream(new ByteArrayInputStream(data))
val baos = new ByteArrayOutputStream()
dis.transferTo(baos)
val result = baos.toByteArray
dis.close()
baos.close()
result
}
Files.write(Paths.get("/tmp/xxx"), compress("a".getBytes("utf-8")))
结果是:
usr@usr:/tmp$ xxd xxx
00000000: 789c 4b04 0000 6200 62 x.K...b.b
但是在bash中运行时,以下结果会有所不同:
usr@usr:/tmp$ echo a| zlib-flate -compress | xxd
00000000: 789c 4be4 0200 00ce 006c x.K......l
任何线索为何结果不同?是算法不一样吗?我已经尝试过使用utf-8以外的其他编码(ascii和utf-16,并且正如预期的那样,ascii或utf-8对于给定的输入看起来是相同的,而utf-16看起来有所不同,但是没有什么区别)我们正在寻找。)
谢谢