10.7-全棧Java筆記:常見流詳解(五)

本節我們學習「常見流中的最后兩項:轉換流和隨意訪問文件流」~

轉換流

InputStreamReader/OutputStreamWriter用來實現將字節流轉化成字符流。比如,如下場景:

System.in是字節流對象,?new BufferedReader(須接受Reader對象)。我們就能將System.in轉換成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可以實現兩個作用:

1.?實現對一個文件做讀和寫的操作。

2.?可以訪問文件的任意位置。不像其他流只能按照先后順序讀取。

在開發某些客戶端軟件時,經常用到這個功能強大可以”任意操作文件內容”的類。比如,軟件的試用次數和使用日期,可以通過本類訪問文件中保存次數和日期的地方進行比對和修改。?JAVA很少開發客戶端軟件,所以在JAVA開發中這個類用的相對較少。

我們需掌握三個核心方法:

1. RandomAccessFile(String name,? String? mode) name用來確定文件;?mode取r(讀)或rw(可讀寫),通過mode可以確定流對文件的訪問權限。

2. seek(long? a)??用來定位流對象讀寫文件的位置,a確定讀寫位置距離文件開頭的字節個數。

3. getFilePointer()??獲得流的當前讀寫位置。

package?com.bjsxt.io;

import?java.io.RandomAccessFile;

/**

?*?測試隨意流

?*?@author?尚學

?*

?*/

public?class?Demo09 {

????public?static?void?main(String[]?args)?throws?Exception {

??????? RandomAccessFile??raf?=?null;

????????//將若干數據寫入到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中讀取數據,位置為從36字節開始。

????????raf.seek(4);

??????? System.out.println(raf.readInt());??//讀取4個字節(int為4個字節)

????????//直接從a.txt中讀取數據,隔一個讀一個數據

????????for(int?i=0;i<10;i+=2){

?????????????raf.seek(i*4);

???????????? System.out.print(raf.readInt()+"\t");

??????? }

??????? System.out.println();? ??//換行

????????//在8字節處插入一個新數據45,替換以前的數據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 ?運行效果圖

至此,所有的常見流我們已經學習完畢,下節我們學習關于「Java對象的序列化和反序列化」。




「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。


?筆記包含從淺入深的六大部分:

?A-Java入門階段

?B-數據庫從入門到精通

?C-手刃移動前端和Web前端

?D-J2EE從了解到實戰

?E-Java高級框架精解

?F-Linux和Hadoop?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容