У меня есть следующий класс подкласса FilterInputStream с переопределением только одного метода. Однако производительность этого класса настолько бедна. Он выполняет на 1/10 скорости своего суперкласса. Я даже взял тот же исходный код из InputStream javasrc и использовал его в моем подклассе. Такая же производительность. Что-то не так с переопределяющими классами?Плохая производительность за счет переопределения класса 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;
}
}
Да, вы читаете() один за другим, если базовая буферизация отсутствует, она будет очень медленной. – akarnokd
вот как реализуется java.io.InputStream, почему так быстро? – erotsppa
Это базовый класс, каждая реализация переопределяет его методы. По умолчанию используется только местозаполнитель. – akarnokd