Java 按位讀取寫入檔案

2021-07-24 23:50:28 字數 1785 閱讀 6267

在實現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類下面的方法 在當前目錄建立乙...