常用輸入字節(jié)流InputStream介紹
輸入字節(jié)流InputStream的一系列實現(xiàn),以下是五種較常用的子類
1、字節(jié)數(shù)組作為輸入源——ByteArrayInputStream
該類包括兩個構(gòu)造方法
ByteArrayInputStream(byte[] buf); ByteArrayInputStream(byte[] buf,int offset,int length );
該類重寫了InputStream中的所有方法,因此我們可以調(diào)用其父類同名的方法進行讀寫操作。
下面是如何通過一個字節(jié)數(shù)組創(chuàng)建字節(jié)輸入流的過程,并從輸入流中讀取數(shù)據(jù)輸出到操作臺。
import java.io.ByteArrayInputStream;
import java.io.IOException;
public class TestByteArrayInputStream {
public static void main(String[] args) throws IOException {
// 初始化字節(jié)數(shù)組
byte[] buf = new byte[3];
buf[0] = 100;
buf[1] = 101;
buf[2] = 102;
// 創(chuàng)建輸入流
ByteArrayInputStream input = new ByteArrayInputStream(buf);
// 從輸入流中讀取數(shù)據(jù)
byte[] out = new byte[3];
input.read(out);
System.out.println(new String(out));
// 關(guān)閉輸入流
input.close();
}
}
2、文件作為輸入源——FileInputStream
FileInputStream從文件系統(tǒng)中的某個文件中獲取輸入字節(jié),適用于讀取諸如圖像數(shù)據(jù)之類的原始數(shù)據(jù)流。有一下兩種創(chuàng)建方法:
FileInputStream(File file);//通過系統(tǒng)中的File對象file指定 FileInputStream(String name);//通過系統(tǒng)中路徑名name指定同樣的我們使用重寫的InputStream中的方法的名稱來實現(xiàn)讀文件內(nèi)容。
下面是如何讀取磁盤文件來創(chuàng)建一個文件輸入流,循環(huán)讀取該數(shù)據(jù)流中的數(shù)據(jù)并輸數(shù)據(jù)到控制臺。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TestFileInputStream {
public static void main(String[] args) throws FileNotFoundException {
try {
// 創(chuàng)建輸入流
FileInputStream input = new FileInputStream("D:/demo/test.txt");
// 從輸入流中讀取數(shù)據(jù)
while (input.available() > 0) {
int out = input.read();
System.out.println((char) out);
}
// 關(guān)閉輸入流
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3、對象作為輸入源——ObjectInputStream
ObjectInputStream與FileInputStream一起使用時,可以為應(yīng)用程序提供對對象圖形的持久儲存。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.sql.Date;
public class TestObjectInputStream {
public static void main(String[] args) throws ClassNotFoundException {
try {
// 創(chuàng)建文件輸入流
FileInputStream file = new FileInputStream("D:/demo?test.tmp");
// 創(chuàng)建對象輸入流
ObjectInputStream object = new ObjectInputStream(file);
// 讀取對象的數(shù)據(jù)
int i = object.readInt();
String string = (String) object.readObject();
Date date = (Date) object.readObject();
System.out.println("i=" + i);
System.out.println("string=" + string);
System.out.println("date=" + date);
// 關(guān)閉流
object.close();
file.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
4、字符串作為輸入源——StringBufferInputStream
StringBufferInputStream允許輸入流由字符串內(nèi)容提供,與ByteArrayInputStream使用字節(jié)數(shù)組作為輸入源類似,但是只有一種構(gòu)造方法:
StringBufferInputStream(String s); //以從指定字符串讀取數(shù)據(jù)
只需要一個字符串作為輸入就可以創(chuàng)建,以下是一個實例:
import java.io.IOException;
import java.io.StringBufferInputStream;
public class TestStringBufferInputStream {
public static void main(String[] args) {
// 創(chuàng)建輸入流
StringBufferInputStream input = new StringBufferInputStream("Hello World!");
// 從輸入流中讀取數(shù)據(jù)
while (input.available() > 0) {
int out = input.read();
System.out.print((char) out);
}
// 關(guān)閉輸入流
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5、緩存輸入流——BufferedInputStream
BufferedInputStream為另一個輸入流添加一些功能,即緩存輸入功能。在創(chuàng)建BufferedInputStream時,會創(chuàng)建一個內(nèi)部緩存區(qū)間數(shù)組。在讀取或者跳過流中字節(jié)時,可根據(jù)需要從包含的輸入流在此填充該內(nèi)部緩存區(qū),一次填充多個字節(jié)。
如果你需要一個具有緩存的文件輸入流,則應(yīng)當(dāng)組合使用FileInputStream和BufferedInputStream,這將能提高讀取效率。
下面一段代碼是將文件輸入流對象轉(zhuǎn)換成緩存輸入流的過程:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TestBufferedInputStream {
private void mian() {
// TODO Auto-generated method stub
try {
// 創(chuàng)建文件輸入流
FileInputStream input = new FileInputStream("D:/demo/test.txt");
BufferedInputStream buffer = new BufferedInputStream(input);
// 從輸入流中讀取數(shù)據(jù)
while (buffer.available() > 0) {
int out = buffer.read();
System.out.print((char) out);
}
// 關(guān)閉流
buffer.close();
input.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
以上這篇常用輸入字節(jié)流InputStream介紹就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 關(guān)于遞歸的調(diào)用機制精細解讀
關(guān)于遞歸是什么,簡單的說: 遞歸就是方法自己調(diào)用自己,每次調(diào)用時 傳入不同的變量.遞歸有助于編程者解決復(fù)雜的問題,同時可以讓代碼變得簡潔2021-10-10
詳解SpringMVC?HandlerInterceptor攔截器的使用與參數(shù)
本文主要介紹了詳解SpringMVC?HandlerInterceptor攔截器的使用與參數(shù),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
Netty分布式pipeline管道傳播outBound事件源碼解析
這篇文章主要介紹了Netty分布式pipeline管道傳播outBound事件源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03
SpringBoot3.3.X整合Mybatis-Plus的實現(xiàn)示例
本文介紹了在Spring Boot 3.3.2中整合MyBatis-Plus 3.5.7,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03

