Я все еще изучаю объектно-ориентированное программирование на Java. Я смотрел на реализацию Java java.io.Reader.skip
, и мне интересно, почему именно она реализована так, как она есть. В частности, у меня есть вопросы об этих вещах, которые я заметил:
- Буфер, используемый для
skip(long)
, является полем объекта Reader, а не нормальной переменной в методе.
- Максимальная длина буфера намного меньше, чем
Integer.MAX_VALUE
2147,483,647. В частности, реализация Java использует 8192.
java.io.InputStream
реализует пропустить точно так же.
Теперь причины, по которым я лично считаю, что буфер является полем, состоят в том, что буфер не должен быть подвергнут повторной сборке мусора из-за повторной инициализации. Это может сделать пропуск быстрее.
Длина буфера меньше, я думаю, что это связано с тем, чтобы считыватель блокировался на более короткие периоды, но поскольку считыватель синхронизирован, будет ли это иметь значение?
Потоки байтов, реализующие его аналогичным образом, могут быть для согласованности. Верны ли мои предположения об этих трех вещах?
Подводя итог, я могу задать следующие вопросы: о том, сколько различий в скорости в среднем имеет использование поля, а не переменной для символьных массивов? Разве это не то же самое, что использовать Integer.MAX_VALUE
в качестве максимальной длины буфера? И разве не лучше и проще использовать метод без параметров read
в цикле for для байтовых потоков, поскольку другие методы read
просто вызывают параметр без параметров read
?
Извините, если мой вопрос странный, но я думаю, что благодаря этому вопросу я могу многое узнать об объектно-ориентированном программировании.