El primer punto es que ni de esos ejemplos de código leen un archivo. Esto puede sonar fatuo o incorrecto, pero es verdad. Lo que realmente hacen es abrir un archivo para leer. Y en términos de lo que realmente hacen, probablemente no haya una gran diferencia en su eficiencia respectiva.
Cuando se trata de leer el archivo, la mejor manera de usarlo dependerá de qué contenido contenga el archivo, en qué forma deben estar los datos para los algoritmos en memoria, etc. Esto determinará si es mejor para usar Scanner
o Reader
crudo, desde una perspectiva de rendimiento y más importante aún desde la perspectiva de hacer que su código sea confiable y mantenible.
Por último, es probable que esto no suponga una diferencia significativa en el rendimiento general de su código. Lo que estoy diciendo es que estás optimizando tu aplicación prematuramente. Es mejor que ignore el rendimiento por ahora y elija la versión que simplificará el resto de su código. Cuando la aplicación esté funcionando, perfórela con algunos datos de entrada representativos. La creación de perfiles le indicará el tiempo que pasa leyendo el archivo, en términos absolutos y en relación con el resto de la aplicación. Esto le dirá si es si se merece el esfuerzo para tratar de optimizar la lectura del archivo.
El único consejo de rendimiento que daría es que la lectura carácter por carácter de un flujo de entrada o lector sin búfer es ineficaz. Si el archivo debe leerse de esa manera, debe agregar un BufferedReader a la pila.
Relacionados: http://stackoverflow.com/questions/2231369/scanner-vs-bufferedreader –
Relacionados: [Scanner v. StreamTokenizer] (http://stackoverflow.com/a/2082174/230513). – trashgod