繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM