【发布时间】:2015-07-10 18:12:02
【问题描述】:
作为我的 Java 课程的一部分,我编写了一个“zip”编写器和阅读器 - 就像 Huffman 算法一样。
我的类扩展了 Reader,并有一个对象 Reader r。 在我的主要方法中,我有以下几行:
input = new BufferedReader(new HuffmanReader(new FileReader("output.hff")));
String str = input.readLine();
它应该在解压之后返回我写入文件的解压字符串,当然。但它返回文件的第一行!
我的阅读功能:
public int read(char[] cbuf, int off, int len) throws IOException {
//...
r.read(buffer,0,8192)
//does the decompress process
String fnlStr = ... //The final result
cbuf = fnlStr.toCharArray();
//close streams
return cbuf.length;
}
我的调试窗口显示如下:
HuffmanReader.read(char[], int, int) line: 23
BufferedReader.fill() line: not available
BufferedReader.readLine(boolean) line: not available
BufferedReader.readLine() line: not available
Run.main(String[]) line: 23
它两次调用我的读取函数。如何阻止 bufferReader 再次调用 read 函数?
【问题讨论】:
-
1.您是否在您的
read()函数中考虑了off和len? 2. 你需要那个 BufferedReader(没有它就不能测试吗)? -
您从
input读取的唯一位置是input.readLine(),它自然只读取一行。我有点惊讶您的read函数完全起作用,因为您实际上并没有写入传入的缓冲区,您只需为cbuf分配一个新缓冲区。 -
你也没有使用
r.read().返回的计数这个代码不可能工作。 -
当我从文件中读取时,我正在读取到临时缓冲区直到 8192 个字符。它有超过 8192 个,它将它复制到传递给解压缩函数的字符串并读取下一个字符。我不能改变主 - 作为练习的一部分。我不知道如何写入我的 BufferedReader - 这就是我所要求的。
标签: java