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

Java BigInteger(line.getBytes())和Files.readAllBytes()提供不同的输出,java,string,file,binary,bits,Java,String,File,Binary,Bits,我正在尝试用Java实现huffman压缩算法。我可以成功地压缩字符串并将其写入文件“compressed.Java”。现在我正在处理第二部分,其中我需要将“compressed.java”解压缩到原始文件 我需要把文件中的每一行读作位。因此,当我有一个非常小的“compressed.java”文件时,我使用Files.readAllBytespath,然后使用String.format%8s,Integer.toBinaryStringb&0xFF.replace“”,“0”,将文件内容转换为

我正在尝试用Java实现huffman压缩算法。我可以成功地压缩字符串并将其写入文件“compressed.Java”。现在我正在处理第二部分,其中我需要将“compressed.java”解压缩到原始文件

我需要把文件中的每一行读作位。因此,当我有一个非常小的“compressed.java”文件时,我使用Files.readAllBytespath,然后使用String.format%8s,Integer.toBinaryStringb&0xFF.replace“”,“0”,将文件内容转换为一个位字符串,然后逐位解析,我可以成功解压缩。但当我有一个非常大的“compressed.java”11MB文件时,Files.readAllBytespath占用了很多时间。所以我想读每一行,然后把它转换成字节流,然后一点一点地解析。因此,我使用BufferedReader.readLine读取每一行,然后使用新的BigIntegerline.getBytes.ToString将其转换为二进制字符串。但是这个字符串和我之前得到的不同


您能告诉我哪里出了错吗。

readLine删除了行终止字符。它还返回字符,而不是字节。你在比较苹果和桔子。如果您需要所有字节,请使用InputStream.readbyte[]循环。

不可能将文件作为位读取,使用Java可以获得的最小单位是字节-您可以自己将每个字节拆分为8位,也可以自己做一些事情,但仅此而已。是的,我知道我无法将文件作为位读取。如果我有一个小文件,那么使用Files.readAllBytePath工作速度很快,并且我能够解压缩压缩文件的内容。但是,如果压缩文件很大,Files.readAllBytespath会占用很多时间。我正在寻找的是一种将文件读取为字节块的方法。但问题仍然是,原始文件中的一些字符将驻留在压缩文件中的两个不同字节中。这也需要注意。我认为您需要放弃当前的任务,首先从java编程基础知识开始—如果不深入了解所选语言,就不可能实现像压缩算法这样复杂的任务。我使用readLine读取的行使用line.getBytes转换为字节。这对其他问题没有帮助。