Запись файла в Java с использованием FileOutputStream - PullRequest
0 голосов
/ 04 мая 2018
String remoteFile2 = "/test/song.mp3";
            File downloadFile2 = new File("D:/Downloads/song.mp3");
            OutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(downloadFile2));
            InputStream inputStream = ftpClient.retrieveFileStream(remoteFile2);
            byte[] bytesArray = new byte[4096];
            int bytesRead = -1;
            while ((bytesRead = inputStream.read(bytesArray)) != -1) {
                outputStream2.write(bytesArray, 0, bytesRead);
            }

Это пример кода записи файла в Java,

byte[] bytesArray = new byte[4096];

В этой строке, что именно означает 4096, какова возможность изменения этого значения?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

При работе с потоком вы часто читаете байты в чанке.

Если вы читаете / записываете байты один за другим, тогда возникает много накладных расходов (например, инициализация массива для хранения байта, помещение байта в поток, запоминание текущей позиции в файле ... и т. Д.) Для каждого байта.

Таким образом, если вы читаете группу байтов, у вас все еще есть эти служебные данные, но они меньше (например, если у вас 4000 байтов, у вас 4000x служебных данных. Но если вы читаете 100 байтов за раз, у вас 4000/100 = 40x служебных данных только)

Длина порции часто выбирается для баланса между временем чтения / записи порции и размером порции.

Его часто устанавливают на 2К или 4К. Может быть связано с сектором диска (512 байт, 2048 байт ...)

0 голосов
/ 04 мая 2018

Здесь 4096 - размер буфера. Поэтому, когда вы выполняете цикл, сначала прочитайте 4096 байт, а после этого он попадет внутрь цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...