2013-05-30 3 views
-1

Если вы хотите найти определенные шестнадцатеричные значения из файла, который вы читаете с буфером, и в конечном итоге разобрать фрагмент кода в выходной файл, что это лучший способ сделать это? Я не ищу пример кода.При чтении двоичного файла с java, как?

Это очень большой файл с несколькими разборками. Должен ли я читать все это в массив? Какой массив? Это будет зависеть от того, что было бы лучше всего для поиска шестнадцатеричных значений, которые я ищу, и я не уверен, как вы будете искать шестнадцатеричное значение в java.

Как вы это сделаете?

EDIT: полная последовательность событий.

«Извините, да, я думаю, это было бы странно. Полное объяснение: что произойдет, это поиск по шаблону байтового маркера. Найдите его, затем я буду иметь дело с следующими 1035 байтами. 12-й и 13-й байт значение, которое мне нужно для проверки, а также 1034-го и 1035-го байтов для другой проверки. Байт 14 - это начало 1016 байт, которые мне нужно проанализировать в файле.

Последовательность событий должна быть: проверьте, проверите вторую проверку, проверьте. Если эти проверки не позволяют записать определенное значение байта в выходной файл (как флаг). Если они хороши, напишите 1016 байт в выходной файл. "

ответ

2

Несколько разборов требуется? в то же время? Не уверен, что это означает.

Я бы, вероятно, начал просто. Преобразуйте шестнадцатеричную строку поиска в массив байтов, который я ищу. Используйте FileInputStream для чтения байтов из файла по несколько раз и сохраняйте общее количество всех байтов, соответствующих байтам поиска в текущем байте файла.

bStream = new BufferedInputStream(new FileInputStream(file)); 
byte[] bytes = new byte[4096]; 
int read; 
while ((read = bStream.read(bytes)) > 0) { 
    // do these new bytes match the pattern I'm looking for 
    // accounting for boundaries, etc 
} 
+0

Извините, что я думаю, это было бы непонятно. Полное объяснение. Что произойдет, так это поиск по шаблону байта маркера. Найди это. Затем я буду заниматься следующими 1035 байтами. 12-й и 13-й байты - это значение, которое мне нужно для проверки, а также 1034-го и 1035-го байтов для другой проверки. Байт 14 - это начало 1016 байт, которые мне нужно проанализировать в файле. Последовательность событий должна быть: сначала проверьте, проверьте. Получите вторую проверку, проверьте. Если эти проверки не позволяют записать определенное значение байта в выходной файл (как флаг). Если они хороши, напишите 1016 байт в выходной файл. –

+0

Да. Вы можете использовать приведенный выше код. Когда вы найдете маркер, выйдите из цикла, прочитайте следующие 2000 байт или все, что вам нужно, для вашей синтаксической работы, идите в город. Возможно, вам придется добавить последний байт [4096] (или два) к вашей рабочей копии (System.arraycopy), потому что он часто содержит байты в дополнение к маркеру. Кстати, я любил твою работу в «Full House». – Keith