Устройства чтения / записи не должны быть по своей природе быстрее, чем Input / OutputStreams.
Тем не менее, прохождение через readLine()
и println()
, вероятно, не является оптимальным способом передачи байтов. В вашем случае, если загружаемый файл не содержит много символов новой строки, BufferedReader придется буферизовать много данных, прежде чем readLine () вернет.
Канонический, не страшный способ передачи данных между потоками - это делать их порциями, используя буфер:
byte[] buf = new byte[1<<12];
InputStream in = urlConnection.getInputStream();
int read = -1;
while ((read = in.read(buf) != -1) {
System.out.write(buf, 0, read);
}
Возможно, еще быстрее использовать NIO, код для него немного менее прост, и я просто использую код, найденный в этом сообщении в блоге .
Если вы пишете в / из файла, лучшим способом является использование подхода с нулевым копированием, который Java делает доступным с FileChannel.transferFrom()
и transferTo()
. Пример кода доступен в статье DeveloperWorks .