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