上一節中我們學習了位元組輸出流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 | 讀取一組位元組資料(隻占數組的部分) |

輸入,讀取單個位元組資料
輸入(int read(byte data[]))讀取一組位元組資料
InputStream類屬于一個抽象類,這時應該依靠它的子類來執行個體化對象,如果要從檔案讀取一定使用FileInputStream子類,對于子類而言隻關心父類對象執行個體化,構造方法:public FileInputStream(File file) throws FileNotFoundException;
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面向對象程式設計文章檢視此處