Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно читать бинарные файлы 
:(
    Опции темы
Royan
Дата 23.3.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



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


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
ressac
Дата 23.3.2008, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



если правильно понял вопрос, то сохрани всё в один массив или лист или в другой подобный объект.
PM MAIL   Вверх
COVD
Дата 23.3.2008, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

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


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

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

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

Это сообщение отредактировал(а) COVD - 23.3.2008, 14:12
PM MAIL   Вверх
Royan
Дата 23.3.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



COVD, Окей понял спасибо!


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
powerOn
Дата 23.3.2008, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(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)
        {
        }




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
w1nd
Дата 23.3.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



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

Это сообщение отредактировал(а) w1nd - 23.3.2008, 23:33


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0490 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.