Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как правильно читать бинарные файлы


Автор: Royan 23.3.2008, 13:04
Для чтения буквенных символов (characters) Используется цепочка new BufferedReader(new FileReader(file)); В моем случае я хочу один раз прочесть бинарный файл и потом ползать по нему в свое удовольствие. Вопрос как мне его буферизировать, чтобы при каждой операции чтения я мог быть уверен в том, что не происходит чтения с диска, а только из памяти?

Автор: ressac 23.3.2008, 13:46
если правильно понял вопрос, то сохрани всё в один массив или лист или в другой подобный объект.

Автор: COVD 23.3.2008, 14:10
Цитата

Вопрос как мне его буферизировать


А что там буферизовать? 

Когда вы читаете текстовые строки, используя BufferedReader, то в каждый вызов readLine() вы получаете всегда одну строку. На самом деле с диска в этот момент может быть прочитан весь файл и уложен в буфер и все последующие вызовы readLine() будут возвращать строки из буфера. 

В случае же с байтовым файлом вам надо определить размер данных, создать соответствующего размера byte[] и записать туда данные. Наверное, проще всего использовать readFully(byte[]) в  DataInputStream( .. ) - этот метод блокируется, пока все не прочитает в byte[].

Автор: Royan 23.3.2008, 14:56
COVD, Окей понял спасибо!

Автор: powerOn 23.3.2008, 14:59
Цитата(Royan @  23.3.2008,  13:04 Найти цитируемый пост)
Вопрос как мне его буферизировать, чтобы при каждой операции чтения я мог быть уверен в том, что не происходит чтения с диска, а только из памяти?


Можно буфферизировать файл с помощью NIO и читать данные через ByteBuffer:

Код

        try
        {
            File file = new File("test.txt");
            RandomAccessFile raf = new RandomAccessFile(file, "r");
            FileChannel channel = raf.getChannel();
            ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
        }
        catch (Exception ex)
        {
        }


Автор: w1nd 23.3.2008, 23:32
Можно использовать файл, отображённый на память. Если её (памяти) достаточно, будет вам полная буферизация, будет недостаточно - не получите OutOfMemory.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)