天天看點

有出有入:使用位元組輸入流 | 帶你學《Java語言進階特性》之五十四

上一篇:使用FileOutputStream将資料寫入檔案 | 帶你學《Java語言進階特性》之五十三

上一節中我們學習了位元組輸出流OutputStream,與之對應的還有位元組輸入流InputStream,本節将為讀者詳細介紹位元組輸入流相關内容與使用FileInputStream讀取檔案内容。

【本節目标】

通過閱讀本節内容,你将了解InputStream接口相關的内容,通過幾組示例圖直覺深刻地了解位元組輸入流的工作原理,學會使用FileInputStream讀取檔案内容。

InputStream位元組輸入流

與OutputStream對應的一個流就是位元組輸入流,InputStream類主要實作的就是位元組資料讀取,該類定義如下:

public abstract class InputStream extends Object implements Closeable           

在InputStream類中定義有如下幾個核心方法:

No 方法 類型 描述
01 public abstract int read() throws IOException 普通 讀取單個位元組資料,如果現在已經讀取到底了,傳回-1
02 public int read(byte[] b) throws IOException 讀取一組位元組資料,傳回的是讀取的個數,如果資料已經讀取到底了則傳回-1
03 public int read(byte[] b, int off, int len) throws IOException 讀取一組位元組資料(隻占數組的部分)
有出有入:使用位元組輸入流 | 帶你學《Java語言進階特性》之五十四

輸入,讀取單個位元組資料

有出有入:使用位元組輸入流 | 帶你學《Java語言進階特性》之五十四

輸入(int read(byte data[]))讀取一組位元組資料

InputStream類屬于一個抽象類,這時應該依靠它的子類來執行個體化對象,如果要從檔案讀取一定使用FileInputStream子類,對于子類而言隻關心父類對象執行個體化,構造方法:public FileInputStream(File file) throws FileNotFoundException;

有出有入:使用位元組輸入流 | 帶你學《Java語言進階特性》之五十四

InputStream

範例:讀取檔案資料

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        File file = new File("D:"+ File.separator + "hello" + File.separator + "mldn.txt");
        InputStream input=new FileInputStream(file);
        byte[] data=new byte[1024];  //開辟一個緩沖區讀取資料
        int len = input.read(data);  //讀取資料,資料全部儲存在位元組數組中,傳回讀取個數
        System.out.println("【"+new String(data,0,len)+"】");
        input.close();
    }
}           

對于位元組輸入流裡面最為麻煩的問題就在于:使用read()方法讀取的時候隻能夠以位元組數組為主進行接收。

特别需要注意的是從JDK1.9開始在InputStream類中增加了一個新的方法:public byte[] readAllBytes() throws IOException;

範例:新方法

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        File file = new File("D:"+ File.separator + "hello" + File.separator + "mldn.txt");
        InputStream input=new FileInputStream(file);
        byte[] data=input.readAllBytes();   //讀取全部資料
        System.out.println("【"+new String(data)+"】");
        input.close();
    }
}           

如果你現在要讀取的内容很大很大的時候,那麼這種讀取會直接将程式崩潰。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:秒懂字元輸出流:Writer | 帶你學《Java語言進階特性》之五十五 更多Java面向對象程式設計文章檢視此處