Ответ 1
Первое, что ни этих образцов кода не читает файл. Это может показаться отвратительным или неправильным, но это правда. Фактически они открывают файл для чтения. И с точки зрения того, что они на самом деле делают, вероятно, нет большой разницы в их эффективности.
Когда дело доходит до фактического чтения файла, наилучший подход к использованию будет зависеть от того, что содержит файл, какова форма данных для ваших алгоритмов в памяти и т.д. Это будет определять, лучше ли используйте Scanner
или raw Reader
с точки зрения производительности и более важно с точки зрения надежного и удобного кода.
Наконец, есть вероятность, что это не повлияет на общую производительность вашего кода. Я говорю, что вы преждевременно оптимизируете свое приложение. На данный момент лучше игнорировать производительность и выбрать версию, которая упростит остальную часть кода. Когда приложение работает, профилируйте его с некоторыми репрезентативными входными данными. Профилирование скажет вам, что время потрачено на чтение файла в абсолютном выражении и относительно остальной части приложения. Это скажет вам, стоит ли пытаться оптимизировать чтение файла.
Единственный бит рекомендаций по производительности, который я бы дал, - это то, что символ по показаниям символов из небуферизованного входного потока или считывателя неэффективен. Если файл необходимо прочитать таким образом, вы должны добавить BufferyReader в стек.