FileWriter為什麼有緩衝區還是慢

2021-10-09 04:54:10 字數 1698 閱讀 4243

緩衝和非緩衝的區別我就不想說了,除了什麼緩衝比較快用車子拖和你乙個人搬,下面是我研究的一些i問題

在使用filewriter時,證明:

非緩衝流也有緩衝區,在單個位元組讀取時,

//m2緩衝m1非緩衝

//相同的輸出流,in是緩衝流,in1是非緩衝

m2(in,f1);

m1(in1,f1);

相同的輸出流,顯然m2一直比m1快效率甚至快了很多

在實驗非緩衝有沒有緩衝區時:

filewriter out=new

filewriter(a);

out.write(「123」);

發現檔案是空的

再加上filewriter out=new filewriter(a);

out.write(「123」);

out.flush();

發現檔案中寫入了內容

經過實驗,發現filewriter在寫入8193個位元組時會進行寫入

不過他的緩衝區是直接在記憶體中的,讀取時還是乙個字元乙個字元進入記憶體,還是很浪費時間,同理在讀取時也是如此

bufferwriter在寫入8192*3+1時才會寫入

他的緩衝區不在記憶體中,他的讀取是還在檔案中,不過記住了讀取哪些檔案然後一股腦傳入記憶體。

這是緩衝位元組流:

public bufferedoutputstream(outputstream

out)

8192是緩衝區大小

這是緩衝字元:

private static int defaultcharbuffersize =

8192;

8192個字元

在緩衝中都可以發現緩衝區的蹤影,但是非緩衝我找了很久沒找到,令人疑惑的是非緩衝如果只寫入乙個字元時,不關閉流也不進行flash操作,這個字元就不會寫入。

bufferedreader in = new bufferedreader(new filereader(「day02/a.txt」));

bufferedwriter out = new bufferedwriter(new filewriter(「day02/a.txt」));

system.out.println(in.readline());

輸出結果:

null

2、使用inputstreamreader可以把指定的位元組流按照指定編碼格式進行轉換為字元

outputstreamwriter可以把字元流按照指定編碼轉換位元組

3、filewriter內部有一部分自處理記憶體,底層雖然是使用位元組流實現但是他進行了一部分的處理導致沒有輸出,所以說它是有緩衝區但是他的緩衝是字元緩衝,字元緩衝之後,還要把它轉換回位元組,然後給它再乙個乙個傳給輸出流,再把它乙個位元組乙個位元組的轉回字元,再乙個乙個寫入檔案。

writer類中的緩衝大小:

private

static

final

int write_buffer_size =

1024

;

位元組流是沒有緩衝的所以最後還是乙個位元組的傳遞,所以速度還是很慢,緩衝的字元和位元組是單獨分開的,字元流的底層不是位元組,所以節省了非緩衝字元最後還要轉換位元組的時間。

結論就是filewriter有1024字元大小的緩衝區,但是底層是位元組實現的,fileoutputstream是沒有緩衝區的,所以還是慢。

03 為什麼封裝,為什麼有this?

為什麼封裝?嬰兒太多了,所以我們會考慮將每個出生的嬰兒的 文件 我們都會放於乙個盒子裡 這樣方便以後我們查詢他的身份證資訊。於是在這個盒子上,我們打了乙個孔,叫set 方法,如果是身份證,我們就取名 setcode 方法,這樣就將乙個人的身份證資訊建立 set了。但放進去後,我們有時候還需要檢驗這個...

中國為什麼有春運

簡單說,如果沒有千萬民工像候鳥一樣經年在城鄉間遷徙,便沒有春運。我們也曾想過擬標題 中國農民工為何像候鳥 但後來覺得,不要這樣。農民工和城裡人一樣,本該過不折騰的生活。輕快把人比作鳥,雖然符合事實,但那是不對的。第乙個原因 地理決定東西差異 歐洲的城市化是相對均勻的城市化,城市星羅棋布,經濟發展也比...

為什麼要學NPDP?有什麼價值?

npdp產品經理國際資格認證,new product development professional npdp 由美國產品開發與管理協會 pdma 所發起,是國際的新產品開發專業認證,集理論 方法與實踐為一體的全方位知識體系,為公司組織層級進行規劃 決策 執行提供良好的方法體系支撐該協會成立於19...