Zugrunde liegenden stream zurückgegeben null bytes

Schreibe ich momentan meine eigenen Brainfuck-interpreter in Java und weil ich will, dass es in der Lage sein zu Lesen von code aus Dateien, die ich schrieb ein BFInputStream - Filter, die unnötigen Symbole aus. Es sieht wie folgt aus:

import java.io.FilterInputStream;
import java.io.InputStream;
import java.io.IOException;

public class BFInputStream extends FilterInputStream {
    public BFInputStream(InputStream in) {
        super(in);
    }
    public int read() throws IOException {
        while(true) {
            int i = super.read();
            //keep LF for line number checking.
            if(i == -1 || i == 10 ||( i >= 43 && i <= 46) || i == 60 || i == 62 || i == 91 || i == 93)
                return i;
        }
    }
    public int read(byte[] b, int off, int len) throws IOException {
        if(off < 0 || len < 0 || len > b.length - off) throw new IndexOutOfBoundsException();
        for(int i=0; i<len; i++) {
            int j = read();
            if(j < 1) return i;
            b[off+i] = (byte)j;
        }
        return len;
    }
}

Mein Interpreter verwendet LineNumberReader<-InputStreamReader<-BFInputStream<-FileInputStream die Datei zu Lesen. Aber jedesmal, wenn er erreicht das Ende der Datei wirft:

java.io.IOException: Zugrunde liegende input-stream zurückgegeben, null bytes

  at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:268)
  at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
  at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
  at java.io.InputStreamReader.read(InputStreamReader.java:167)
  at java.io.BufferedReader.fill(BufferedReader.java:136)
  at java.io.BufferedReader.read(BufferedReader.java:157)
  at java.io.LineNumberReader.read(LineNumberReader.java:108)
  at Interpreter.run(Interpreter.java:101)
  at Interpreter.main(Interpreter.java:180)

Dolmetscher.java:101 enthält einen call-to BFInputStream.read().

Ich bin mir nicht sicher, ob ich verstehe Ausnahme richtig. Ich denke, dass der stream wieder keine bytes an alle (wegen timeout). Ich denke, wenn es einen großen Teil von nicht-BF-Zeichen dann, dass möglich sein könnte, aber am Ende der Datei? FileInputStream und daher FilterInputStream und BFInputStream sollte -1 zurückgeben.

Was ist falsch an meinem code?

Schreibe einen Kommentar