Да конечно.
BufferedReader br = ...
StringBuilder sb = new StringBuilder(ESTIMATED_LENGTH);
int ch;
while ((ch = br.read()) != -1 && ch != '\t') {
sb.append(ch);
}
В лучшем случае вы получите производительность, почти не уступающую BufferedReader.readLine()
. В худшем случае вы выполняете одну-две дополнительные копии символов (я думаю)... что не так уж плохо для производительности1.
Чтобы получить производительность, которая не уступает BufferedReader
, потребуется взломать сам код BufferedReader
... или переписать его.
(Ваша попытка расширения BufferedReader
не работает, потому что вы вызываете private
методы из родительского класса. Это не разрешено! Если вы собираетесь «исправить» это, изменив доступ к методу, вы можете просто «клонировать» BufferedReader
и добавьте к нему свои методы. Конечно, ваш класс больше не является java.io.BufferedReader
или его подклассом.)
1 – Для обоснования рассмотрите общую картину. Если вы откуда-то читаете большие объемы данных, узким местом производительности, вероятно, будет либо ввод-вывод, либо то, что вы делаете с токенами после их чтения. Если это не так, то вам, вероятно, следует использовать 1) java.nio
/ CharBuffer
, 2) собственный стек ввода-вывода или 3) другой язык программирования.
person
Stephen C
schedule
29.05.2016