Это чрезвычайно сложная проблема для решения с использованием существующих классов Java. По одной причине вы проигнорировали тот факт, что вы не можете фактически передать InputStream в BufferedReader, вам нужно передать Reader.
Файлы работают в байтах, а читатели - с символами. Поскольку любой данный символ может занимать произвольное количество байтов в произвольном наборе символов, вам нужно будет записать, сколько байтов каждого символа потребовалось, чтобы иметь возможность вычислить количество байтов, которое определенное количество символы представлены в файле.
Если вы готовы пойти на очень хрупкий подход, вы можете предположить, что каждый байт в вашем файле представляет символ (например, ASCII) и что каждая строка заканчивается "\n"
. Тогда нужно просто записать, сколько символов вы прочитали. Примерно так:
public class CountingBufferedReader extends BufferedReader {
private int position = 0;
public String readLine() {
String line = super.readLine();
position += line.length() + 1;
return line;
}
public int getPosition() {
return position;
}
}
Заставить его работать в общем случае для любого ввода и любого набора символов гораздо сложнее, и, вероятно, для эффективной работы потребуется переписать многие существующие классы.