Чтение заголовка вопроса InputStream - PullRequest
0 голосов
/ 06 августа 2011

Я пытаюсь прочитать заголовок файла InputStream. Каждая информация заголовка содержит информацию. Однако у меня возникли проблемы с пониманием процесса чтения заголовка.

Например, у меня есть:

InputStream sourceFile = //.... stuff.
sourceFile.read() | (sourceFile.read() << 8) | (sourceFile.read() << 16) 
      | (sourceFile.read() << 24)

из примера кода.

Почему бы мне просто не использовать sourceFile.read() один раз? Что означает одиночный | и что означает << number в данном конкретном контексте?

Спасибо за любые разъяснения!

Ответы [ 2 ]

2 голосов
/ 06 августа 2011

Похоже, вы здесь запутались в терминах - заголовок - это первая часть файла, а входной поток - это просто поток, используемый для чтения из этого файла.Там нет "InputStream файл".Заголовки также различны для каждого файла - нет стандартного «формата заголовка» для всех файлов.

Кажется, что этот конкретный фрагмент кода делает чтение первого 32-битного целого числа из файла (множественное чтениенеобходимо, потому что каждый вызов read () просто читает один байт.)

В терминах << это оператор сдвига влево, а число после него определяет количество битов для перемещения вперед.Числа увеличиваются с 8 до 16 до 24, поскольку биты смещаются в правильную позицию (8 бит в байте, поэтому число для сдвига увеличивается на 8 каждый раз). </p>

2 голосов
/ 06 августа 2011

read() возвращает int, но он читает один байт из файла, поэтому идея состоит в том, чтобы получить первые 4 байта и преобразовать их в 32-разрядное целое число (при изменении их порядкового номера ).

Операторы, на которые вы ссылаетесь, являются двоичными и побитовыми операторами. пожалуйста, обратитесь здесь для получения дополнительной информации.

...