2016-05-06 4 views
0

Я практикую кодировку huffman из своего класса программирования. Я выполнил почти всю кодирующую часть. Например, я присвоил каждому символу код (т. Е. A = 100100) и преобразует каждый символ в текст в соответствии с его кодом. Затем я анализирую каждый код в список байтов, например, разбирает 100100 в байт и сохраняет его в списке. Однако мне нужно написать все байты в файл .txt. Я понял, что есть проблема.Java-байт в файл .txt

Пример: один символ имеет код «1001», и он будет записан в .txt-файл как 1 байт, а не только 4 бита.

Я знаю, что после HUFFMAN кодирования символов сохраняются в формате, как: «11100111101011111101011011111000010000101» , но теперь моя ситуация каждый символ берут 1 байт размера, который не имеет разного размера с исходного входного файла перед кодированием ,

Есть ли способ сохранить код в формате «11100111101011111101011011111000010000101»?

Извините за мой английский, я попытался изо всех сил объяснить свое замешательство.

+0

Вы должны написать каждый байт как двоичную строку. [Это] (http://stackoverflow.com/questions/4421400/how-to-get-0-padded-binary-representation-of-an-integer-in-java) может помочь вам. –

+0

Я просто попробовал свой метод, если я напишу строку в байт в файл, размер файла будет в 10 раз больше. – Ming

+0

В этом разница между txt и двоичным форматом. –

ответ

0
try (FileWriter fw = new FileWriter("out.txt")) { 
    try (BufferedWriter bfw = new BufferedWriter(fw)) { 
     char[] buffer = str.toCharArray(); 
     for (int i = 0; i < buffer.length; i++) { 
      bfw.write(Integer.valueOf(Byte.valueOf((byte) buffer[i]).intValue()).toBinaryString()); 
     }  
    } 
} 
0

Вы можете использовать BitSet объект, если вы собираетесь хранить все биты в памяти.

BitSet bits = new BitSet(); 
bits.set(7000, true); 
if (bits.get(7000)) { ... } 
byte[] bytes = bits.toByteArray(); 

Path path = Paths.get("C:/Temp/huffman.bin"); 
Files.writeBytes(path, bytes); 

Использование байтов сразу же возможно.

Однако вы не можете писать символ; есть конверсия, которая все испортит. Mind char - 16 бит UTF-16, отформатированный, чтобы содержать Unicode.

Это записывает двоичные данные, а не текст.

Для конечных бит я не знаю, как Хаффман справляется с этим, сделайте немного исследований; Я думаю, что бит 0 будет делать и не генерировать артефакты. Возможно, добавьте первые 0-7 бит более длинного кода. Padding - ключевое слово.

 Смежные вопросы

  • Нет связанных вопросов^_^