Java開罐頭——I/O流官方緩沖流Buffered Streams

收納進(jìn)此專輯:I/O流官方中文指南系列概述及索引

大部分內(nèi)容來自 The Java? Tutorials 官方指南,其余來自別處如ifeve的譯文、imooc、書籍Android面試寶典等等酱虎。
作者: @youyuge
個人博客站點(diǎn): https://youyuge.cn

一、緩沖流Buffered Streams

Most of the examples we've seen so far use unbuffered I/O. This means each read or write request is handled directly by the underlying OS. This can make a program much less efficient, since each such request often triggers disk access, network activity, or some other operation that is relatively expensive.

目前為止擂涛,我們所使用的都是未緩沖的I/O逢净。這意味著每次的讀寫請求都直接通過底層的操作系統(tǒng)OS。這可能使得一個程序不那么有效率歼指,由于每次這樣的請求會經(jīng)常觸發(fā)硬盤的讀取爹土,網(wǎng)絡(luò)活動或者一些其他相當(dāng)耗時的操作。

To reduce this kind of overhead, the Java platform implements buffered I/O streams. Buffered input streams read data from a memory area known as a buffer; the native input API is called only when the buffer is empty. Similarly, buffered output streams write data to a buffer, and the native output API is called only when the buffer is full.

為了減少這種負(fù)載踩身,Java平臺實(shí)現(xiàn)了緩沖I/O流胀茵。緩沖輸入流從一個被稱為緩沖區(qū)的存儲區(qū)讀取數(shù)據(jù);僅僅當(dāng)緩沖區(qū)為空時挟阻,才會調(diào)用底層(native層)的輸入的api方法琼娘。同樣,緩沖輸出流輸出數(shù)據(jù)到緩沖區(qū)附鸽,僅當(dāng)緩沖區(qū)滿了之后才會調(diào)用底層的輸出方法(或者直接調(diào)用flush方法立刻輸出緩沖區(qū)內(nèi)容)脱拼。

A program can convert an unbuffered stream into a buffered stream using the wrapping idiom we've used several times now, where the unbuffered stream object is passed to the constructor for a buffered stream class. Here's how you might modify the constructor invocations in the CopyCharacters example to use buffered I/O:

Java程序能通過包裝構(gòu)造方法,把一個非緩沖流轉(zhuǎn)換成緩沖流坷备。只要將非緩沖流對象傳給緩沖流的類的構(gòu)造器即可熄浓。下面展示了如何通過構(gòu)造器包裝來使用緩沖流I/O:

inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));

There are four buffered stream classes used to wrap unbuffered streams: BufferedInputStream
andBufferedOutputStream
create buffered byte streams, while BufferedReader
and BufferedWriter
create buffered character streams.

有四種緩沖流的類,來包裝非緩沖流:BufferedInputStream BufferedOutputStream構(gòu)造緩沖字節(jié)流省撑, BufferedReader BufferedWriter構(gòu)造緩沖字符流赌蔑。

二俯在、清空(立刻輸出)緩沖流Flushing Buffered Streams

It often makes sense to write out a buffer at critical points, without waiting for it to fill. This is known as flushing the buffer.

非常多的情況下,有必要在一些關(guān)鍵時刻確保緩沖區(qū)的及時輸出娃惯,而非等待它填滿再輸出跷乐。這被稱為清空緩沖區(qū)。

Some buffered output classes support autoflush, specified by an optional constructor argument. When autoflush is enabled, certain key events cause the buffer to be flushed. For example, an autoflush PrintWriter
object flushes the buffer on every invocation of println
or format
. See Formatting for more on these methods.

一些緩沖輸出類支持自動清空緩沖區(qū)趾浅,由可選的構(gòu)造器參數(shù)來確定愕提。當(dāng)自動清空可用時,一些明確規(guī)定好的關(guān)鍵事件會觸發(fā)緩沖區(qū)的清空皿哨。舉個栗子揪荣,一個自動清空的PrintWriter對象在每次調(diào)用println或者format方法時會自動清空輸出緩沖區(qū)。(比如我們熟知的System.out.println()方法)

To flush a stream manually, invoke its flush method. The flush method is valid on any output stream, but has no effect unless the stream is buffered.

想人為地清空一個流往史,可以調(diào)用它的flush()方法仗颈。這個方法在任何的輸出流上都是可用的,但是僅僅在緩沖流上有效果椎例。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挨决,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子订歪,更是在濱河造成了極大的恐慌脖祈,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刷晋,死亡現(xiàn)場離奇詭異盖高,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)眼虱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門喻奥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捏悬,你說我怎么就攤上這事撞蚕。” “怎么了过牙?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵甥厦,是天一觀的道長。 經(jīng)常有香客問我寇钉,道長刀疙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任扫倡,我火速辦了婚禮谦秧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己油够,他們只是感情好蚁袭,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布征懈。 她就那樣靜靜地躺著石咬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卖哎。 梳的紋絲不亂的頭發(fā)上鬼悠,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機(jī)與錄音亏娜,去河邊找鬼焕窝。 笑死,一個胖子當(dāng)著我的面吹牛维贺,可吹牛的內(nèi)容都是我干的它掂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼溯泣,長吁一口氣:“原來是場噩夢啊……” “哼虐秋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起垃沦,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤客给,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肢簿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體靶剑,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年池充,在試婚紗的時候發(fā)現(xiàn)自己被綠了桩引。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡收夸,死狀恐怖阐污,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咱圆,我是刑警寧澤笛辟,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站序苏,受9級特大地震影響手幢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忱详,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一围来、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦监透、人聲如沸桶错。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽院刁。三九已至,卻和暖如春粪狼,著一層夾襖步出監(jiān)牢的瞬間退腥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工再榄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狡刘,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓困鸥,卻偏偏與公主長得像嗅蔬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子疾就,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容