Als Teil meines Java-Kurses schrieb ich einen "Zip" -Schreiber und -Leser - so funktioniert der Huffman-Algorithmus.Leser erweitern, wie kann ich mein "Lesen" zurückgeben?
Meine Klasse erweitert Reader, und haben ein Objekt Reader r. In meinem Haupt-Methode, ich habe diese Zeilen:
input = new BufferedReader(new HuffmanReader(new FileReader("output.hff")));
String str = input.readLine();
Es sollte die dekomprimierte Zeichenkette kehre ich in die Datei geschrieben, nachdem es dekomprimiert, natürlich. Aber es gibt die erste Zeile der Datei zurück!
Meine Lesefunktion:
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;
}
Meine Debug-Fenster zeigt dies:
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
Es ruft meine Lesefunktion zweimal. Wie kann ich verhindern, dass der bufferReader die Lesefunktion erneut aufruft?
1. Halten Sie 'off' und' len' in Ihrer 'read()' Funktion? 2. Benötigen Sie diesen BufferedReader (können Sie nicht ohne ihn testen)? – xerx593
Die einzige Stelle, an der Sie von 'input' lesen, ist in' input.readLine() ', die natürlich nur eine Zeile liest. Ich bin ein wenig überrascht, dass deine 'read'-Funktion überhaupt funktioniert, weil du nicht wirklich in den übergebenen Puffer schreibst, sondern einfach' cbuf' einen neuen Puffer zuweist. – dddsnn
Sie verwenden auch die von 'r.read() zurückgegebene Anzahl nicht.' Dieser Code kann möglicherweise nicht funktionieren. – EJP