Специальный поток ввода, который будет читать только кратный массив размеров - PullRequest
0 голосов
/ 21 октября 2019

Мне нужно прочитать диск CD / DVD в режиме RAW, используя Java. Я знаю, как это сделать (используя unc path как \. \ E: \), и я могу читать некоторые данные. Но если я хочу пропустить большой объем данных, он потерпел неудачу из-за буферизации и выравнивания файлов, как указано здесь Microsoft: https://docs.microsoft.com/en-us/windows/win32/fileio/file-buffering

Мой размер сектора составляет 2048 байт, если я читаю 2048 байт или если япропустить кратное 2048 байт, это работает. Я использую буферизованный читатель входного потока размером 8192 байта, и он действительно кратен 2048.

Но если мне нужно пропустить не многократное число байтов, следующее чтение завершится неудачей.

Есть ли входной поток, который всегда будет выдавать чтение 2048 байтов в базовый файл?

1 Ответ

1 голос
/ 21 октября 2019

Спецификация java о том, как работает inputtreams в целом и FileInputStream / Files.newInputStream, не указана до уровня детализации, который вы можете гарантировать , что он скажет базовому драйверу ОС прочитатьточно 2048 байт. В этом смысле ваш вопрос просто отвечает: Нет, нет входного потока, который всегда будет выдавать чтение 2048 байт в базовый файл.

Однако на практике вызов read(someByteArr) для нового новогоразвернутый развернутый new FileInputStream на ресурсе, где someByteArr имеет размер точно 2048 байт, действительно всегда должен делать то, что вы хотите, даже если спецификация не совсем гарантирует это. Напишите код, который всегда вызывает метод чтения (или пропуска) с числом, кратным 2048, и предоставляет дополнительный API, который позволяет вам читать меньшие части этого, если вам необходимо.

Обратите внимание, что связанный документ углубляется в специфичные для ОСдетали до уровня, который java не позволяет вам делать (не прибегая к так называемому коду native; вы не хотите идти туда, поверьте мне). Java не совсем подходит для этой работы.

...