2014-02-09 5 views
4

У меня вопрос о размере буфера в Java. Почему мы устанавливаем размер буфера на 1024 или 2^n. Например:Размер буфера в Java

inputStream = file.getInputStream(); 
    File newFile = new File("C:/uploads/operators.xml"); 
    outputStream = new FileOutputStream(newFile); 
    int read = 0; 

    byte[] bytes = new byte[1024]; 
    while ((read = inputStream.read(bytes)) != -1) { 
     outputStream.write(bytes, 0, read); 
    } 
    outputStream.close(); 
    inputStream.close(); 

Как работает outputStream.write(bytes, 0, read);? Почему мы используем массив bytes?

ответ

1

Вы read байтов длины bytes.length из потока файлов и сохраняете их в массиве байтов bytes[]. И затем вы получите write байт в форме outputStreem bytes[]. Подробнее читайте в документации Java I/O.

+0

Но почему '2^n'? Почему не просто «1000»? – Tony

+0

@Tony Поскольку [1024 байта == 1 килобайт] (http://pc.net/helpcenter/answers/why_1024_bytes). –

+0

Итак, почему мы используем килобайт? – Tony

1

Чтобы избежать потерь в файловой системе, размер байтов должен быть кратным размеру сектора файловой системы (например, 512 байт).

То же самое относится к кешу ЦП L1. Большинство процессоров Intel 486 имеют кеш 1K L1, поэтому значение 1024. Процессоры Pentium имеют как минимум 8K L1 кеш, поэтому 8 * 1024 также часто используется.

Последние файловые системы имеют размер сектора 4K, а последние процессоры имеют как минимум 64 Кбайт L1, поэтому 64 * 1024 также является выбором.

+0

Это правильно ответит на вопрос. На самом деле файловая система не читает и не записывает один байт за раз. Он перемещает блоки по байтам за раз. Я пытаюсь вспомнить, когда я прочитал об этом некоторое время назад, и поэтому может быть неправильным, но я считаю, что если вы выбрали размер буфера '508', а система перемещала« 512 »байт за раз, четыре байта, которые вы пробовали для сохранения файловой системы все равно не будет использоваться. – Steve

Смежные вопросы