在實現huffman樹時,壓縮和解壓需要從檔案中按位讀取,即一次唯讀乙個位或者寫乙個位。
《演算法(第四版)》中提供了一種實現方法,stdin類和stdout類,豁然開朗。
方法:
1. 開闢乙個緩衝區int buffer
,用於儲存位,並記錄緩衝區中bit數n
2. 緩衝區不為空時,進行位運算buffer>>(n-1)
,即為buffer中的最高位,實現讀取乙個位的操作
例:buffer(二進位制表示)
11001010n8
buffer向右移7個位buffer >> (8-1)
,即可得到最高位1
public
static
boolean
readboolean()
其他部分實現
public
final
class
binarystdin
// don't instantiate
private
binarystdin()
private
static
void
fillbuffer()
catch (ioexception e)
}/**
* returns true if standard input is empty.
*@return true if and only if standard input is empty
*/public
static
boolean
isempty()
}
按位寫入的實現,主要是利用與運算|
的特性:
1.0 | n = n
2.1 | n = 1
與按位讀取相同,我們同樣要使用乙個緩衝區。
假設要寫入的位為 bit,則
1. 將buffer左移一位buffer <<= 1
,空出一位存放bit
2. 如果bit為1,則 buffer = buffer | 1;如果bit為0,則buffer即為寫入bit後的緩衝區
例如:buffer(二進位制表示)
110110
bit1
buffer <<= 1
1101100
bit的8位二進位制表示
00000001
與運算結果
1101101
**實現
private
static
void
writebit(boolean bit)
完整實現
public
final
class
binarystdout
/*** write the specified bit to standard output.
*/private
static
void
writebit(boolean bit)
private
static
void
clearbuffer()
catch (ioexception e)
n = 0;
buffer = 0;
}
python 按行讀取並判斷按行寫入檔案
f open description opinion.json w encoding utf 8 forline inopen test1set raw search.test1.json encoding utf 8 if question type description fact or opi...
java讀取和寫入txt檔案
要處理的資料為以下資料,需要將資料中的 以及 全部變成tab空格 1 rhizoma polygoni cuspidati hu zhang 虎杖 cyp1b1 2 rhizoma polygoni cuspidati hu zhang 虎杖 hgf hpta 3 rhizoma polygoni ...
寫入 讀取檔案
file類下面的方法 string str file.readalltext aa.txt system.text.encoding.getencoding utf 8 讀取檔案 console.writeline str console.read filestream類下面的方法 在當前目錄建立乙...