BigInteger(line.getBytes())和Files.readAllBytes()给出不同的输出

时间:2015-10-10 23:17:01

标签: java string file binary bits

我正在尝试在Java中实现霍夫曼压缩算法。我可以成功地压缩字符串并将其写入文件(比如'compressed.java')。现在我正在研究第二部分,我需要将'compressed.java'解压缩到原始文件中。

我需要读取文件中的每一行作为位。所以,当我有一个非常小的'compressed.java'文件时,我使用Files.readAllBytes(path)然后使用String.format("%8s", Integer.toBinaryString(b & 0xFF)).replace(' ', '0'),将文件内容转换为一串位,然后逐位解析,我可以解压缩成功。但是当我有一个非常大的'compressed.java'(11 MB)文件时,Files.readAllBytes(path)花了这么多时间。所以我想到读取每一行然后将其转换为字节流然后逐位解析。所以我使用BufferedReader.readLine读取每一行,然后使用新的BigInteger(line.getBytes()).toString(2)转换为二进制字符串。但是这个字符串与我之前的字符串不同。

你能告诉我我犯了哪些错误。

1 个答案:

答案 0 :(得分:0)

npm version删除行终止字符。它还返回字符,而不是字节。你在比较苹果和橘子。如果您想要所有字节,请使用readLine()循环。