您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何使用InputStream字節流,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
1、字節數組作為輸入源——ByteArrayInputStream
該類包括兩個構造方法
ByteArrayInputStream(byte[] buf); ByteArrayInputStream(byte[] buf,int offset,int length );
該類重寫了InputStream中的所有方法,因此我們可以調用其父類同名的方法進行讀寫操作。
下面是如何通過一個字節數組創建字節輸入流的過程,并從輸入流中讀取數據輸出到操作臺。
import java.io.ByteArrayInputStream; import java.io.IOException; public class TestByteArrayInputStream { public static void main(String[] args) throws IOException { // 初始化字節數組 byte[] buf = new byte[3]; buf[0] = 100; buf[1] = 101; buf[2] = 102; // 創建輸入流 ByteArrayInputStream input = new ByteArrayInputStream(buf); // 從輸入流中讀取數據 byte[] out = new byte[3]; input.read(out); System.out.println(new String(out)); // 關閉輸入流 input.close(); } }
2、文件作為輸入源——FileInputStream
FileInputStream從文件系統中的某個文件中獲取輸入字節,適用于讀取諸如圖像數據之類的原始數據流。有一下兩種創建方法:
FileInputStream(File file);//通過系統中的File對象file指定 FileInputStream(String name);//通過系統中路徑名name指定同樣的我們使用重寫的InputStream中的方法的名稱來實現讀文件內容。
下面是如何讀取磁盤文件來創建一個文件輸入流,循環讀取該數據流中的數據并輸數據到控制臺。
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class TestFileInputStream { public static void main(String[] args) throws FileNotFoundException { try { // 創建輸入流 FileInputStream input = new FileInputStream("D:/demo/test.txt"); // 從輸入流中讀取數據 while (input.available() > 0) { int out = input.read(); System.out.println((char) out); } // 關閉輸入流 input.close(); } catch (IOException e) { e.printStackTrace(); } } }
3、對象作為輸入源——ObjectInputStream
ObjectInputStream與FileInputStream一起使用時,可以為應用程序提供對對象圖形的持久儲存。
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 { // 創建文件輸入流 FileInputStream file = new FileInputStream("D:/demo?test.tmp"); // 創建對象輸入流 ObjectInputStream object = new ObjectInputStream(file); // 讀取對象的數據 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); // 關閉流 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允許輸入流由字符串內容提供,與ByteArrayInputStream使用字節數組作為輸入源類似,但是只有一種構造方法:
StringBufferInputStream(String s); //以從指定字符串讀取數據
只需要一個字符串作為輸入就可以創建,以下是一個實例:
import java.io.IOException; import java.io.StringBufferInputStream; public class TestStringBufferInputStream { public static void main(String[] args) { // 創建輸入流 StringBufferInputStream input = new StringBufferInputStream("Hello World!"); // 從輸入流中讀取數據 while (input.available() > 0) { int out = input.read(); System.out.print((char) out); } // 關閉輸入流 try { input.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
5、緩存輸入流——BufferedInputStream
BufferedInputStream為另一個輸入流添加一些功能,即緩存輸入功能。在創建BufferedInputStream時,會創建一個內部緩存區間數組。在讀取或者跳過流中字節時,可根據需要從包含的輸入流在此填充該內部緩存區,一次填充多個字節。
如果你需要一個具有緩存的文件輸入流,則應當組合使用FileInputStream和BufferedInputStream,這將能提高讀取效率。
下面一段代碼是將文件輸入流對象轉換成緩存輸入流的過程:
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 { // 創建文件輸入流 FileInputStream input = new FileInputStream("D:/demo/test.txt"); BufferedInputStream buffer = new BufferedInputStream(input); // 從輸入流中讀取數據 while (buffer.available() > 0) { int out = buffer.read(); System.out.print((char) out); } // 關閉流 buffer.close(); input.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
以上就是如何使用InputStream字節流,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。