Можно ли записать в файл в 20 битах вместо 8,16,32 в Java? - PullRequest
0 голосов
/ 05 октября 2019

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

Итак, я использую DataOutputStream и могу писать только с 8, 16 и 32 битами, но я хотел бы знать, можно ли записать 20 бит для экономии места. Под экономией места я имею в виду, что когда я сжимаю свой файл, мой код состоит из 19 битов, и поэтому вместо записи их в 32 с помощью writeInt () я хотел бы записать их, используя 20 бит, чтобы сжатый файл был меньше.

1 Ответ

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

Наименьшая единица данных, которую поддерживает Java, - это байт 8 бит. Таким образом, наименьший файл, который вы можете написать с помощью Java, в котором хранится 20 бит информации, имеет размер 24 бита (3 байта).

Существует также тот факт, что базовые файловые системы, поддерживаемые большинством операционных систем, не поддерживают файлразмеры произвольного размера в битах.

Однако, если вы имеете в виду, если возможно иметь поток данных, который семантически представляет собой последовательность из 20-битных сегментов, уверен, что это возможно. Вам просто нужно сдвинуть биты данных, чтобы использовать методы, которые записывают 8, 16 или 32 бита.

Например, 2 сегмента по 20 битов могут быть записаны с 5 байтами, где первые 2 байта содержат 16 битовпервый сегмент, средний байт содержит оставшиеся 4 бита первого сегмента и первые 4 бита 2-го сегмента, а последние 2 байта содержат оставшиеся 16 бит 2-го сегмента:

|--------------------------------------------|
|  1st 20 bit segment  | 2nd 20 bit segment  |
|--------------------------------------------|
| byte1  | byte2  | byte3  | byte4  | byte5  |
|--------------------------------------------|
...