Если все, что вам нужно, - это наиболее эффективный вывод содержимого файла на консоль без промежуточной обработки, преобразование данных в символы и поиск разрывов строк не требуют дополнительных затрат. Вместо этого вы можете просто прочитать блоки байтов из файла и записать их прямо в System.out
:
package toconsole;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
public class Main {
public static void main(String[] args) {
BufferedInputStream bis = null;
byte[] buffer = new byte[8192];
int bytesRead = 0;
try {
bis = new BufferedInputStream(new FileInputStream(args[0]));
while ((bytesRead = bis.read(buffer)) != -1) {
System.out.write(buffer, /* start */ 0, /* length */ bytesRead);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try { bis.close(); } catch (Exception e) { /* meh */ }
}
}
}
Если вы раньше не сталкивались с подобными идиомами, оператор в условии while назначает результат bis.read для bytesRead, а затем сравнивает его с -1. Поэтому мы продолжаем читать байты в буфер, пока нам не сообщат, что мы находимся в конце файла. И мы используем bytesRead в System.out.write, чтобы убедиться, что мы записываем только те байты, которые только что прочитали, поскольку мы не можем предполагать, что все файлы кратны 8 КБ!