大家好,我是Java進階者。
前言
本文主要學習字節緩沖流使用BufferedInputStream和BufferedOutputStream這兩個流的用法來實現文本拷貝、字符流、Reader類、Writer類這些的用法。接下來小編帶大家一起來學習這些用法!
一、字節緩沖流
1.在前面我們學習了BufferedInputStream和BufferedOutputStream類,這兩個類分別是FilterInputStream類和FilterOutputStream類的子類。它們的構造方法分別接受InputStream和OutStream類型的參數,在讀寫數據有一個緩沖的功能。
2.使用緩沖流來完成讀寫數據,接下來通過一個案例使用BufferedInputStream和BufferedOutputStream這兩個流的用法來實現文本拷貝。實現例子如下所示:
(1)首先在text文件夾目錄下創建一個test11.txt并寫入"Hello,world~~~test!"內容。
(2)實現文件的拷貝代碼如下所示:
- import java.io.*;
- public class P11 {
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- //創建有緩沖區的輸入流和輸出流
- BufferedInputStream in = new BufferedInputStream(new FileInputStream("text/test11"));
- BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("text/test12"));
- int num;
- //判斷是否讀到文件的末尾
- while((num=in.read())!=-1){
- bos.write(num);
- }
- //關閉流
- in.close();
- bos.close();
- }
- }
運行的結果如下所示:
在上面的代碼中,創建了BufferedInputStream和BufferedOutputStream兩個緩沖流對象,在這兩個流中內部定義一個字節數組,當調用read()方法或write()方法讀寫數據,先將讀寫的數據存到字節數組,在把字節數組的數據一次性讀寫到文件中。
二、字符流
1.我們前面學過InputStream和OutputStream的輸入輸出操作都是基于字節的,字節流不能操作Unicode字符,我們知道漢字在文件是占2個字節,若使用字節流讀取不當會出現亂碼現象例如顯示一個正方形的框。使用字符流可以避免出現亂碼現象。
2.字符流有兩個抽象超類分別是Reader和Writer,Reader是字符輸入流,使用從某個源設備讀取字符,Writer是字符輸出流,用于向某個目標設備寫入字符。
三、Reader類
1.java.io.Reader是字符輸入流的最頂層的父類,這個類定義了以字符為單位讀取數據的基本方法,并在子類進行分化和實現。
2.Reader類方法有如下所示:
(1)public int read() throws IOException:讀取一個字符。在讀取流,如果沒有數據就會出現調用受阻的現象,程序會一直等待到有數據讀出為止。
(2)public int read(char cbuf[]) throws IOException:讀取多個字符到字符數組cbuf。
(3)public int read(char cbuf[],int off,int len) throws IOException:從off開始的位置中讀取len個字符存放到字符數組。off參數表示數組偏移量,len參數表示讀取數據的長度。
(4)public void mark(int readAheadLimit) throws IOException:在輸入流中設置標記。
(5)public boolean markSupporter() throws IOException:測試輸入流是否支持mark()方法
(6)public void reset() throws IOException:重置流的當前位置到前面標記的位置。
(7)public void close() throws IOException:表示關閉流。
(8)public long skip(long n) throws IOException:略過流中的數據。若數據不夠,跳過僅有的字節,返回跳過的字節數。
(9)public boolean ready():返回輸入流是否做好讀的準備。
3.Reader類實例代碼如下所示:
(1)在text文件夾目錄下創建一個test13.txt文件并寫入"Hello,World!Java進階學習交流!"。
(2)代碼實現的例子:
- public class P12 {
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- //聲明File對象
- File f=new File("text/test13");
- Reader in=new FileReader(f);
- //所有的數據讀到數組c中
- char c[]=new char[1024];
- //讀取內容
- int len=in.read(c);
- //關閉流
- in.close();
- System.out.println("內容為:"+new String(c,0,len));
- }
- }
運行的結果如下所示:
四、Writer類
1.Writer類是一個寫入字符流的抽象類。
2.Writer方法有如下所示:
(1)public void close() throws IOException方法:表示關閉流。
(2)public voir write(int c) throws IOException方法:表示寫入單個字符。
(3)public abstract void read(char cbuf[],int off,int len) throws IOException方法:向流中寫入一個數組,參數off指定數組的偏移量,len指定讀取數據的長度。
(4)public void write(String str) throws IOException方法:寫入一個字符串。
五、總結
本文主要介紹了字節緩沖流、字符流、Reader類、Writer類。字節緩沖流是使用BufferedInputStream和BufferedOutputStream這兩個流的用法來實現文本拷貝。字符流有兩個抽象超類分別是Reader和Writer,Reader是字符輸入流,使用從某個源設備讀取字符,Writer是字符輸出流,用于向某個目標設備寫入字符。介紹了Reader類的方法,通過Reader類實例來實現讀取文本文件內容,Writer類是一個寫入字符流的抽象類。希望大家通過本文的學習,對你有所幫助!
我是Java進階者,希望大家通過本文的學習,對你有所幫助!歡迎大家加我微信,有問題可以隨時幫大家解決噢,交個朋友也好哇~
原文鏈接:https://mp.weixin.qq.com/s/O4KJ9jS1AqVnVSVTWLM7vQ