簡體   English   中英

Java將字節寫入.txt文件

[英]Java writing byte into a .txt file

我正在從我的編程課練習霍夫曼編碼。 我已經完成了幾乎所有的編碼部分。 例如,我為每個字符分配了一個代碼(即a = 100100),並根據其代碼在文本中轉換了每個字符。 然后,我將每個代碼解析為字節列表,就像將100100解析為字節並將其存儲到列表中一樣。 但是,我需要將所有字節寫入.txt文件。 我意識到有問題。

示例:一個字符的代碼為“ 1001”,它將以1字節而不是4位的形式寫入.txt文件。

我知道在霍夫曼編碼后,字符以以下格式存儲:“ 11100111101011111101101011011111000010000101”,但是現在我的情況是每個字符都占用1個字節的大小,該大小與編碼之前的原始輸入文件沒有什么不同。

有什么方法可以將代碼存儲為“ 11100111101011011111101011011111000010000101”這樣的格式?

對不起我的英語,我盡力解釋我的困惑。

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());
        }       
    }
}

如果打算將所有位保留在內存中,則可以使用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);

立即使用字節是可行的。

但是你不能寫char的。 有一個轉換使事情變得混亂。 介意char是16位UTF-16格式,包含Unicode。

這將寫入二進制數據,而不是文本。

對於尾隨的位,我不知道霍夫曼是如何處理的,請進行一些研究。 我認為位0將起作用並且不會產生偽像。 也許添加較長代碼的前0-7位。 填充是關鍵詞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM