我正在尝试在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)
转换为二进制字符串。但是这个字符串与我之前的字符串不同。
你能告诉我我犯了哪些错误。
答案 0 :(得分:0)
npm version
删除行终止字符。它还返回字符,而不是字节。你在比较苹果和橘子。如果您想要所有字节,请使用readLine()
循环。