摘要:是字節(jié)流通向字符流的橋梁它使用指定的讀取字節(jié)并將其解碼為字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺(tái)默認(rèn)的字符集。為了達(dá)到最高效率,可要考慮在內(nèi)包裝。
JAVA緩沖區(qū)就是先讀一些數(shù)據(jù)在內(nèi)存中間或者先寫一部分?jǐn)?shù)據(jù)在內(nèi)存中。比如寫,不是每次寫數(shù)據(jù)到磁盤, 而是先把數(shù)據(jù)寫到內(nèi)存中,等到內(nèi)存的緩沖區(qū)滿了再一次寫入磁盤,減少磁盤訪問。JAVA讀取大文需要使用radomAccessFile與NIO。InputStreamReader 是字節(jié)流通向字符流的橋梁:它使用指定的 charset讀取字節(jié)并將其解碼為字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺(tái)默認(rèn)的字符集。 每次調(diào)用InputStreamReader 中的一個(gè) read() 方法都會(huì)導(dǎo)致從底層輸入流讀取一個(gè)或多個(gè)字節(jié)。要啟用從字節(jié)到字符的有效轉(zhuǎn)換,可以提前從底層流讀取更多的字節(jié),使其超過滿足當(dāng)前讀取操作所需的字節(jié)。 為了達(dá)到最高效率,可要考慮在 BufferedReader 內(nèi)包裝 InputStreamReader。例如:
BufferedReader in = new BufferedReader(new InputStreamReader);
import java.io.*; import java.io.DataInputStream; public class Main{ public static void main(String[] args) throws Exception { BufferedReader reader= new BufferedReader(new InputStreamReader(new FileInputStream(new File("text.txt")))); String line=null; while((line=reader.readLine())!=null){ String[] s=line.split("s+"); for ( String single:s ) { System.out.println(single); } } } } (System.in));
s匹配任意的空白符,包括空格,制表符(Tab),換行符,中文全角空格。InputStreamReader 中的一個(gè) read()是每次都會(huì)從磁盤里面讀取一個(gè)字節(jié)。
關(guān)于flush方法:每一個(gè)IO流都有自己的緩沖區(qū)。
flush本意是沖刷,這個(gè)方法大概取自它引申義沖馬桶的意思,馬桶有個(gè)池子,你往里面扔?xùn)|西,會(huì)暫時(shí)保存在池子里,只有你放水沖下去,東西才會(huì)進(jìn)入下水道。
同理很多流都有一個(gè)這樣的池子,專業(yè)術(shù)語叫緩沖區(qū),當(dāng)你print或者write的時(shí)候,會(huì)暫時(shí)保存在緩沖區(qū),并沒有發(fā)送出去,這是出于效率考慮的,因?yàn)閿?shù)據(jù)不會(huì)自己發(fā)送過去,必須有其他機(jī)制,而且這個(gè)很消耗資源,就像馬桶你需要很多水,才能沖走,你如果扔一點(diǎn)東西,就沖一次水,那你水費(fèi)要爆表了,同樣如果你寫一行文字,或者一個(gè)字節(jié),就要馬上發(fā)送出去,那網(wǎng)絡(luò)流量,CPU使用率等等都要爆表了,所以一般只有在你真正需要發(fā)送否則無法繼續(xù)的時(shí)候,調(diào)用flush,將數(shù)據(jù)發(fā)送出去。
flush的作用就是強(qiáng)制清空緩存, 寫入IO,比如如果寫操作之后程序不是對應(yīng)著輸出流的關(guān)閉,而是進(jìn)行其他阻塞式的操作(比如從輸入流里面讀數(shù)據(jù)), 這個(gè)時(shí)候緩存數(shù)據(jù)就直接丟失。這個(gè)時(shí)候記住要flush一下, 只有這樣服務(wù)端才能收到客戶端發(fā)送的數(shù)據(jù),否則可能會(huì)引起兩邊無限的互相等待
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/65491.html
摘要:下面我們使用字節(jié)輸入輸出流來說明這個(gè)問題輸入流一般是由對象如建立的,當(dāng)新建一個(gè)時(shí),對象建立了一個(gè)包含有數(shù)據(jù)的管道其實(shí)就是我們所說的這個(gè)流并將對象存儲(chǔ)的數(shù)據(jù)輸入到管道中,因此管道里的數(shù)據(jù)流就是對象內(nèi)的數(shù)據(jù)。 流的原理: showImg(/img/bVqa89); 一連串有順序的數(shù)據(jù)系列可以看成是一個(gè)流。 輸入輸出流: 數(shù)據(jù)從IO輸入到程序的流是輸入流,數(shù)據(jù)從程序輸出到IO的流是輸出流。 ...
摘要:知識點(diǎn)總結(jié)類知識點(diǎn)總結(jié)后提供的輸入數(shù)據(jù)類,此類位于包中,不僅可以完成輸入數(shù)據(jù)的操作,還可以方便地對輸入數(shù)據(jù)進(jìn)行驗(yàn)證。 Java知識點(diǎn)總結(jié)(JavaIO- Scanner類 ) @(Java知識點(diǎn)總結(jié))[Java, JavaIO] showImg(https://segmentfault.com/img/bV9dAj?w=838&h=396); JDK 1.5后提供的輸入數(shù)據(jù)類,此類位于...
摘要:知識點(diǎn)總結(jié)合并流類知識點(diǎn)總結(jié)合并流的主要功能是將兩文件的內(nèi)容合并成一個(gè)文件字節(jié)在多文件的應(yīng)用場景下非常高效,因?yàn)槭菍⒍鄠€(gè)流串聯(lián)起來,形成一個(gè)流,便于操作 Java知識點(diǎn)總結(jié)(JavaIO- 合并流類 ) @(Java知識點(diǎn)總結(jié))[Java, JavaIO] [toc] showImg(https://segmentfault.com/img/bV9a9X?w=853&h=164); 合...
摘要:知識點(diǎn)總結(jié)類知識點(diǎn)總結(jié)類用于從緩沖區(qū)中讀取內(nèi)容,所有的輸入字節(jié)數(shù)據(jù)都將放在緩沖區(qū)中中定義的構(gòu)造方法只能接收字符輸入流的實(shí)例,所以必須使用字符輸入流和字節(jié)輸入流的轉(zhuǎn)換類將字節(jié)輸入流轉(zhuǎn)變?yōu)樽址鳌? Java知識點(diǎn)總結(jié)(JavaIO- BufferedReader類) @(Java知識點(diǎn)總結(jié))[Java, JavaIO] [toc] showImg(https://segmentfault....
摘要:知識點(diǎn)總結(jié)類知識點(diǎn)總結(jié)類類可以進(jìn)行創(chuàng)建和刪除文件等操作。使用一個(gè)類,則必須向類的構(gòu)造方法中傳遞一個(gè)文件路徑。 Java知識點(diǎn)總結(jié)(JavaIO-File類) @(Java知識點(diǎn)總結(jié))[Java, JavaIO] [toc] File類 File類可以進(jìn)行創(chuàng)建和刪除文件等操作。使用一個(gè)File類,則必須向File類的構(gòu)造方法中傳遞一個(gè)文件路徑。 showImg(https://segme...
摘要:知識點(diǎn)總結(jié)轉(zhuǎn)換流知識點(diǎn)總結(jié)是的子類,將一個(gè)字符流的輸出對象變?yōu)樽止?jié)流的輸出對象。將字節(jié)輸出流轉(zhuǎn)為字符輸出流字節(jié)流轉(zhuǎn)為字符流蘋果將字節(jié)輸入流轉(zhuǎn)為字符輸入流內(nèi)容是 Java知識點(diǎn)總結(jié)(JavaIO-轉(zhuǎn)換流) @(Java知識點(diǎn)總結(jié))[Java, JavaIO] [toc] showImg(https://segmentfault.com/img/bV82dQ?w=849&h=226); O...
閱讀 3548·2021-11-08 13:30
閱讀 3634·2019-08-30 15:55
閱讀 756·2019-08-29 15:16
閱讀 1798·2019-08-26 13:57
閱讀 2155·2019-08-26 12:18
閱讀 861·2019-08-26 11:36
閱讀 1801·2019-08-26 11:30
閱讀 3216·2019-08-23 16:46