私はFilterInputStreamの以下のクラスサブクラスを持っていますが、オーバーライドされたメソッドは1つだけです。しかし、このクラスのパフォーマンスはとても悪いです。スーパークラスの1/10の速度で実行されます。私はjavasrcのInputStreamから同じソースコードを取り出し、私のサブクラスで使っていました。同じパフォーマンスがヒットしました。クラスのオーバーライドに問題がありますか?Javaクラスをオーバーライドするとパフォーマンスが低下しますか?
public class NewLineStream extends FilterInputStream {
public NewLineStream(InputStream in) {
super(in);
}
public int read(byte[] b, int off, int len) throws IOException {
if (b == null) {
throw new NullPointerException();
} else if ((off < 0) || (off > b.length) || (len < 0) ||
((off + len) > b.length) || ((off + len) < 0)) {
throw new IndexOutOfBoundsException();
} else if (len == 0) {
return 0;
}
int c = read();
if (c == -1) {
return -1;
}
b[off] = (byte)c;
int i = 1;
try {
for (; i < len ; i++) {
c = read();
if (c == -1) {
break;
}
if (b != null) {
b[off + i] = (byte)c;
}
}
} catch (IOException ee) {
}
return i;
}
}
はい、あなたは1つずつ読む()、あなたは基本的なバッファリングが進行していない場合、それは本当に遅くなります。 – akarnokd
これはjava.io.InputStreamがどのように実装されているのか、それはなぜ高速ですか? – erotsppa
基本クラスであり、すべての実装がそのメソッドをオーバーライドします。デフォルトは単なるプレースホルダです。 – akarnokd