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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чтение бинарного файла, чтение файла 
:(
    Опции темы
zyxel0
Дата 10.1.2011, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Надо прочитать и распихать содержимое файла. Беда в том, что файл бинарный, но в нем есть шапка.
То есть сначала идут несколько строк из которых надо получить значения, а все остальное загнать в память

Как лучше такой файл обработать ? Я пытаюсь сейчас использовать Scanner, но я не уверен что это правильное решение

Вот пример этого файла. 
Код

   17:49:59 2010  
   ш@  
   Start=1000  
   Stop=8000  
   Step=10  
   Zero=1  
   Imp=3  
   FilterType=1  
   Constant=29 №;  
   3  
   =H7   
   (@  
   9й  
   AH2NT@I1cVy  
   H  
   ...  

PM MAIL   Вверх
triclosan
Дата 10.1.2011, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(zyxel0 @  10.1.2011,  18:36 Найти цитируемый пост)
Я пытаюсь сейчас использовать Scanner, но я не уверен что это правильное решение

верно, сканнер только для текста. Используйте FileInputStream
PM MAIL   Вверх
zyxel0
Дата 10.1.2011, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо
пока я делаю так

Код

scanner=new Scanner(new FileInputStream(filename));
i=scanner.nextLine(); 
System.out.println(i); //Дата получена
i=scanner.nextLine(); //пропускаю строку
i2=scanner.nextLine();//читаю строку
System.out.println(i2);


Последняя строка указанного фрагмента выводит
Код

Start=1000  


как мне выкинуть не "печатный" символ ? аналогичный вопрос о строке Constant=29 №;  
как разбить ее на "символьность" и "бинарность" ?



PM MAIL   Вверх
triclosan
Дата 10.1.2011, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



использовать вместо nextLine - nextByte() 

или
если количество "мусорных" байт фиксировано (1 в вашем случае)
Код

System.out.println(i2.substring(1));

PM MAIL   Вверх
Kircul
Дата 11.1.2011, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 6
Всего: 7



Цитата(triclosan @  10.1.2011,  20:38 Найти цитируемый пост)
если количество "мусорных" байт фиксировано (1 в вашем случае)
Код

System.out.println(i2.substring(1));


Сомневаюсь что это правильно. Параметр в методе substring означает не кол-во байт, а кол-во символов (а это большая разница!).
Цитата(zyxel0 @  10.1.2011,  18:57 Найти цитируемый пост)
как мне выкинуть не "печатный" символ ?

Что-то я совсем вас не понимаю, о каком непечатном символе говорите?
Цитата(zyxel0 @  10.1.2011,  18:57 Найти цитируемый пост)
аналогичный вопрос о строке Constant=29 №;  
как разбить ее на "символьность" и "бинарность" ?

И тут тоже не понятно, где бинарные данные вы видите? Я могу пока что трактовать это значение как строку.
Если это возможно приложите, плз, файл который вам хочется распарсить.
PM   Вверх
zyxel0
Дата 11.1.2011, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот файлик


Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  file.dat 26,65 Kb
PM MAIL   Вверх
Kircul
Дата 11.1.2011, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 6
Всего: 7



На сколько я вижу данный файл разделен на блоки байтом '03', один из блоков представляет из себя ассоциативный массив записанный вроде бы строками разделенными байтом '0A'.

Т.о. если вы разделите файл на блоки символом '03' то проблема с непечатным символом у вас пропадет. Я описал только один блок, он символьный (еще один, первый, тоже частично символьный) остальные похоже бинарные.

Дальше разбирайтесь сами.

З.Ы. мои рассуждения это всего лишь догадки и могут быть в корне неверные.
PM   Вверх
Temdegon
Дата 11.1.2011, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



Мне кажется надо плясать от того, что и как в это файл записывается, и уже исходя из этого строить алгоритм чтения.
Т.е. нужно знать, что читать из файла и в какой последовательности.
К примеру, мы знаем, что этот файл - база данных телефонного справочника, и запись в него происходит примерно так:
сначала дата в виде long, потом число записе - n int, а потом туда сериализуются n-записей телефонной книги. Они в свою очередь могут быть экземплярами классов с каким-то набором полей, и сериализоваться через какой-то стандартный механизм языка. Могут быть какими-нить структурами, и записываться туда вручную. Они могут содержать какие-то вложенные структуры или обьекты. 
В какой кодировке строки, байты пишутся big endian или little endian, разрядность используемых типов данных и т.д. - все это нужно знать.
Вот к примеру, в файл подряд пишутся два инта и два лонга. в файле это будет выглядеть как набор байт без каких-либо разделителей. Если вы знаете, что они пишутся в таком порядке, то вы их читаете, и проблем нету. А если не знаете, то как вы это узнаете? А может там вообще не int,int, long, long, а десяток чисел типа byte?

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

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

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


 




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


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

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