在本教程中,我們將通過(guò)一個(gè)示例來(lái)學(xué)習(xí)Java InputStream類及其方法。
java.io包的InputStream類是一個(gè)抽象超類,它表示字節(jié)的輸入流。
由于InputStream是抽象類,因此它本身沒(méi)有用。但是,其子類可用于讀取數(shù)據(jù)。
為了使用的InputStream功能,我們可以使用其子類。它的子類有:
在下一個(gè)教程中,我們將學(xué)習(xí)所有這些子類。
為了創(chuàng)建InputStream,我們必須首先導(dǎo)入java.io.InputStream包。導(dǎo)入包后,就可以創(chuàng)建輸入流。
// 創(chuàng)建一個(gè)InputStream InputStream object1 = new FileInputStream();
在這里,我們使用FileInputStream創(chuàng)建了一個(gè)輸入流。這是因?yàn)镮nputStream是一個(gè)抽象類。因此,我們不能創(chuàng)建InputStream的對(duì)象。
注意:我們還可以從InputStream的其他子類創(chuàng)建輸入流。
InputStream類提供了由其子類實(shí)現(xiàn)的不同方法。以下是一些常用的方法
read() - 從輸入流中讀取一個(gè)字節(jié)的數(shù)據(jù)
read(byte[] array) - 從流中讀取字節(jié)并存儲(chǔ)在指定的數(shù)組中
available() - 返回輸入流中可用的字節(jié)數(shù)
mark() - 標(biāo)記輸入流中數(shù)據(jù)所在的位置
reset() -將控制點(diǎn)返回到流中設(shè)置標(biāo)記的點(diǎn)
markSupported()- 檢查流中是否支持mark()和reset()方法
skips() - 跳過(guò)和丟棄輸入流中的指定字節(jié)數(shù)
close() - 關(guān)閉輸入流
下面是使用FileInputStream類實(shí)現(xiàn)InputStream的方法。
假設(shè)我們有一個(gè)名為input.txt的文件,其中包含以下內(nèi)容。
這是文件中的一行文本。
讓我們嘗試使用FileInputStream (InputStream的子類)來(lái)讀取這個(gè)文件。
import java.io.FileInputStream; import java.io.InputStream; public class Main { public static void main(String args[]) { byte[] array = new byte[100]; try { InputStream input = new FileInputStream("input.txt"); System.out.println("文件中的可用字節(jié): " + input.available()); //從輸入流中讀取字節(jié) input.read(array); System.out.println("從文件讀取的數(shù)據(jù): "); //將字節(jié)數(shù)組轉(zhuǎn)換為字符串 String data = new String(array); System.out.println(data); //關(guān)閉輸入流 input.close(); } catch (Exception e) { e.getStackTrace(); } } }
輸出結(jié)果
文件中的可用字節(jié): 35 從文件讀取的數(shù)據(jù): 這是文件中的一行文本。
在上面的示例中,我們使用FileInputStream類創(chuàng)建了輸入流。輸入流與文件input.txt鏈接。
InputStream input = new FileInputStream("input.txt");
為了從input.txt文件中讀取數(shù)據(jù),我們實(shí)現(xiàn)了這兩種方法。
input.read(array); //從輸入流中讀取數(shù)據(jù) input.close(); //關(guān)閉輸入流