[英]BigInteger(line.getBytes()) and Files.readAllBytes() giving different outputs
我正在尝试用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
读取每一行,然后使用new BigInteger(line.getBytes()).toString(2)
转换为二进制字符串。 但是此字符串与我之前获得的字符串不同。
你能告诉我我在哪里犯错。
readLine()
删除行终止符。 它还返回字符,而不是字节。 您正在比较苹果和桔子。 如果需要所有字节,请使用InputStream.read(byte[])
循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.