Буферы и байты? - PullRequest
       67

Буферы и байты?

0 голосов
/ 28 августа 2009

Может ли кто-нибудь объяснить мне, как использовать буферы, и, возможно, некоторые простые (задокументированные) примеры использования буфера. Спасибо.

Мне не хватает знаний в этой области Java-программирования, поэтому прости меня, если я задал вопрос неправильно. : S

Ответы [ 3 ]

2 голосов
/ 28 августа 2009

Буфер - это пространство в памяти, где данные временно хранятся до их обработки. См. статью в вики

Вот простой пример Java о том, как использовать класс ByteBuffer.

Обновление

public static void main(String[] args) throws IOException 
{
    // reads in bytes from a file (args[0]) into input stream (inFile)
    FileInputStream inFile = new FileInputStream(args[0]);
    // creates an output stream (outFile) to write bytes to.
    FileOutputStream outFile = new FileOutputStream(args[1]);

    // get the unique channel object of the input file
    FileChannel inChannel = inFile.getChannel();
    // get the unique channel object of the output file.
    FileChannel outChannel = outFile.getChannel();    

    /* create a new byte buffer and pre-allocate 1MB of space in memory
       and continue to read 1mb of data from the file into the buffer until 
       the entire file has been read. */
    for (ByteBuffer buffer = ByteBuffer.allocate(1024*1024); inChannel.read(buffer) !=  1; buffer.clear()) 
    {
       // set the starting position of the buffer to be the current position (1Mb of data in from the last position)
       buffer.flip();
       // write the data from the buffer into the output stream
       while (buffer.hasRemaining()) outChannel.write(buffer);
    }

    // close the file streams.
    inChannel.close();
    outChannel.close();     
}

Надежда, которая немного проясняет ситуацию.

1 голос
/ 28 августа 2009

С буфером люди обычно подразумевают некоторый блок памяти для временного хранения некоторых данных. Одно из основных применений буферов - операции ввода-вывода.

Такое устройство, как жесткий диск, хорошо для быстрого чтения или записи блока последовательных битов на диске за один раз. Чтение большого объема данных может быть выполнено очень быстро, если вы скажете жесткому диску «прочитать эти 10 000 байт и поместить их в память здесь». Если вы запрограммируете цикл и получаете байты один за другим, сообщая жесткому диску, чтобы каждый раз получать по одному байту, это будет очень неэффективно и медленно.

Итак, вы создаете буфер в 10 000 байт, говорите жесткому диску прочитать все байты за один раз, а затем обрабатываете эти 10 000 байт один за другим из буфера в памяти.

0 голосов
/ 28 августа 2009

В разделе учебников по Java для Sun по этой теме:

http://java.sun.com/docs/books/tutorial/essential/io/index.html

...