轉(zhuǎn)換流
InputStreamReader/OutputStreamWriter用來實現(xiàn)將字節(jié)流轉(zhuǎn)化成字符流牙言。比如,如下場景:
System.in是字節(jié)流對象只损,?new BufferedReader(須接受Reader對象)辕漂。我們就能將System.in轉(zhuǎn)換成Reader對象厨喂,即可完成此場景。
【示例1】使用InputStreamReader接受用戶的輸入
BufferedReader bReader=?null;
try?{
??? System.out.println("名字:");
??? bReader =?new?BufferedReader(new?InputStreamReader(System.in));
??? System.out.println("用戶輸入:"+ bReader.readLine());
}?catch?(IOException ? e) {
?????? e.printStackTrace();
}
隨意訪問文件流
RandomAccessFile可以實現(xiàn)兩個作用:1.?實現(xiàn)對一個文件做讀和寫的操作奴烙。
2.?可以訪問文件的任意位置助被。不像其他流只能按照先后順序讀取。
在開發(fā)某些客戶端軟件時切诀,經(jīng)常用到這個功能強大可以”任意操作文件內(nèi)容”的類揩环。比如,軟件的試用次數(shù)和使用日期幅虑,可以通過本類訪問文件中保存次數(shù)和日期的地方進行比對和修改丰滑。?JAVA很少開發(fā)客戶端軟件,所以在JAVA開發(fā)中這個類用的相對較少倒庵。
我們需掌握三個核心方法:
1. RandomAccessFile(String name,? String? mode) name用來確定文件褒墨;?mode取r(讀)或rw(可讀寫),通過mode可以確定流對文件的訪問權(quán)限哄芜。
2. seek(long? a)??用來定位流對象讀寫文件的位置貌亭,a確定讀寫位置距離文件開頭的字節(jié)個數(shù)。
3. getFilePointer()??獲得流的當(dāng)前讀寫位置认臊。
package?com.bjsxt.io;
import?java.io.RandomAccessFile;
/**
?*?測試隨意流
?*?@author?尚學(xué)
?*
?*/
public?class?Demo09 {
????public?static?void?main(String[]?args)?throws?Exception {
??????? RandomAccessFile??raf?=?null;
????????//將若干數(shù)據(jù)寫入到a.txt文件
????????int[]?data?= {10,20,30,40,50,60,70,80,90,100};
????????raf?=?new?RandomAccessFile("d:/a.txt",?"rw");
????????for(int?i=0;i<data.length;i++){
?????????????raf.writeInt(data[i]);
??????? }
????????//直接從a.txt中讀取數(shù)據(jù)圃庭,位置為從36字節(jié)開始。
????????raf.seek(4);
??????? System.out.println(raf.readInt());??//讀取4個字節(jié)(int為4個字節(jié))
????????//直接從a.txt中讀取數(shù)據(jù)失晴,隔一個讀一個數(shù)據(jù)
????????for(int?i=0;i<10;i+=2){
?????????????raf.seek(i*4);
???????????? System.out.print(raf.readInt()+"\t");
??????? }
??????? System.out.println();? ??//換行
????????//在8字節(jié)處插入一個新數(shù)據(jù)45剧腻,替換以前的數(shù)據(jù)30
??? ????raf.seek(8);
????????raf.writeInt(45);
????????for(int?i=0;i<10;i++){
?????????????raf.seek(i*4);
???????????? System.out.print(raf.readInt()+"\t");
??????? }
????????raf.close();
??? }
}
示例1 ?運行效果圖
至此,所有的常見流我們已經(jīng)學(xué)習(xí)完畢涂屁,下節(jié)我們學(xué)習(xí)關(guān)于「Java對象的序列化和反序列化」书在。
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G拆又,10年Java研發(fā)經(jīng)驗儒旬,曾在神州數(shù)碼栏账、航天院某所研發(fā)中心從事軟件設(shè)計及研發(fā)工作,從小白逐漸做到工程師栈源、高級工程師挡爵、架構(gòu)師。精通Java平臺軟件開發(fā)甚垦,精通JAVAEE茶鹃,熟悉各種流行開發(fā)框架。
?筆記包含從淺入深的六大部分:
?A-Java入門階段
?B-數(shù)據(jù)庫從入門到精通
?C-手刃移動前端和Web前端
?D-J2EE從了解到實戰(zhàn)
?E-Java高級框架精解
?F-Linux和Hadoop?