Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用Snappy将字符串解压缩为字符串_Java_Snappy - Fatal编程技术网

在Java中使用Snappy将字符串解压缩为字符串

在Java中使用Snappy将字符串解压缩为字符串,java,snappy,Java,Snappy,我试图压缩字符串,将它们写入文件(作为字符串)并解压缩这些文件。 为了压缩,我编写了以下函数: public static String compress(String s) throws IOException { byte[] by = Snappy.compress(s, StandardCharsets.UTF_8); return new String(by, StandardCharsets.UTF_8); } 然后,对于解压缩 public static Stri

我试图压缩
字符串
,将它们写入文件(作为
字符串
)并解压缩这些文件。 为了压缩,我编写了以下函数:

public static String compress(String s) throws IOException {
    byte[] by = Snappy.compress(s, StandardCharsets.UTF_8);
    return new String(by, StandardCharsets.UTF_8);
}
然后,对于解压缩

public static String uncompress(String s) throws IOException {
    byte[] by = s.getBytes(StandardCharsets.UTF_8);
    return Snappy.uncompressString(by, StandardCharsets.UTF_8);
}
但是我得到的
解压失败(5)
,通过查看数据,
snapy.compress(s,StandardCharsets.UTF_8)
与将
getBytes(StandardCharsets.UTF_8)
应用到使用
compress
函数压缩的数据时,不会得到相同的结果。
你知道为什么吗?我如何压缩和解压到
字符串
?谢谢

压缩结果以字节为单位,您需要将其存储为字节,直到再次解压缩。无法将压缩的字节转换回
字符串
字节[]
甚至可能不包含有效的UTF-8)


现在您要问“但是如何将压缩的
字符串
保存到文件中?”。嗯,你要把它保存到一个二进制文件中,也就是说,写字节而不是字符串。这意味着您无法在记事本中编辑该文件,甚至无法查看该文件(当然可以,但它会乱七八糟)。

这确实有效,请使用
Base64.getEncoder()
Base64.getDecoder()

尽管snappy使用的字节空间比Base64字符串小。
另外,编码/解码增加了约45%的性能和不必要的开销,snappy正试图降低这些性能和开销。

为什么要将结果存储在
压缩方法中的
字符串
对象中?字符串不适合存储任意字节。使
压缩
方法返回
字节[]
而不是
字符串
,并使
解压缩
方法将
字节[]
作为参数,而不是
字符串
。如果您真的需要将字节存储在字符串中,那么您必须使用类似于base64编码的方法。
BitShuffle.unshuffleIntArray(Snappy.uncompress(Base64.getDecoder().decode(new String(Base64.getEncoder().encode(Snappy.compress(BitShuffle.shuffle(new int[]{1, 2, 3})))))));