更新時間:2020-08-03 15:29:26 來源:動力節點 瀏覽2213次
一、流的概念
在Java中,流是從源到目的地的字節的有序序列。Java中有兩種基本的流——輸入流(InputStream)和輸出流(OutputStream)。
根據流相對于程序的另一個端點的不同,分為節點流和過濾流。
(1)節點流:以特定源如磁盤文件、內存某區域或者線程之間的管道為端點的構造輸入輸出流,是一種基本的流。
(2)過濾流:以其他已經存在的流為端點構造的輸入輸出流。
根據流中的數據單位分為字節流和字符流。
(1)字節流:流中的數據是以8位字節為單位進行讀寫,以InputStream和OutputStream為基礎類。
(2)字符流:流中的數據是以16為字符為單位進行讀寫,以Reader和Writer為基礎類。
二、字節流
InputStream和OutputStream是字節流的兩個頂層父類,提供了輸入流類和輸出流類的通用API。
1、輸入字節流
InputStream基本方法:
(1)基本讀方法;:int read()int read(byte[]b)int read(byte[]b,int off,int len)
(2)關閉流:void close()
(3)返回輸入流中還有多少可讀字節int available()
(4)跳過指定字節long skip(long n)
(5)回讀數據boolean markSupported()void Mark(int readlimt)void reset()
2、輸出字符流
OutputStream基本方法:
(1)基本寫方法:void write(int c)void write(byte[]b)void write(byte[]b,int off,int len)
(2)關閉流:void close()
(3)q強制輸出:void flush()
三、字符流
Reader和Writer是字符流的頂層父類,字符流能夠處理Unicode字符集中的所有字符。成員方法和字節流類似。
四、輸入輸出流的套接
節點流在程序中不是很常見,一般通過過濾流將多個流套接起來,利用各個流的特性共同處理數據。
例如下圖:一個文件流為了為了提高效率,套接了緩存流,最后套接了數據流。
五、常見的輸入輸出流
1、文件流:文件流屬于節點流,包括FileInputStream和FileOutputStream類以及Reader和Writer類。這些類都是對文件系統中的文件進行讀寫。文件流的創建是調用相應的構造方法,并經常以字符串形式的文件名或者一個File類的對象為參數,例如:
1 public FileInputStream(String name);
2 public FileInputStream(File file);
例如使用文件流實現文件的復制:
package?ch01;
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileNotFoundException;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.OutputStream;
public?class?CopyBytes?{
????public?static?void?main(String[]?args)?throws?IOException?{
????????FileInputStream?fileis?=?new?FileInputStream(new?File("E:\\file/FileTest01.txt"));
????????FileOutputStream?fileos?=?new?FileOutputStream(new?File("E:\\\\file/FileTest02.txt"));
?????????int?c;
?????????while?((c=fileis.read())?!=?-1)?{?
?????????????fileos.write(c);
?????????????System.out.println(c);
?????????}
?????????fileis.close();
?????????fileos.close();
?????????System.out.println("OK");?
????}
}
2、使用文件字符流實現
package?ch07;
import?java.io.FileReader;
import?java.io.FileWriter;
import?java.io.IOException;
public?class?Copy?{
public?static?void?main(String[]?args)?throws?IOException{
????//創建文件字符輸入/輸出流
????FileReader?in?=new?FileReader("E:\\workspace\\tmpfile\\farrago.doc");
????FileWriter?out=new?FileWriter("E:\\workspace\\tmpfile\\outagainb.doc");
????int?c;
????while((c=in.read())!=-1){
????????System.out.println(c);
????????out.write(c);
????}
????in.close();
????out.close();
}
}
六、緩沖流
緩沖流BufferedInputStream和BufferedOutputStream類和BufferedReader和BufferedWriter類。這種流把數據從原始流成塊讀入或者積累到一個大數據快的時候在成批寫出。BufferedOutputStream和BufferedWrite僅僅在緩沖區滿或者調用flush()時候才把數據寫到目的地。
構造方法:
public BufferedInputStream(InputStream in)
public BufferedInputStream(InputStream in,int size)
七、管道流
管道流可以實現線程之間的數據的直接傳輸。
1、管道流模型:
PipedReader/PipedInputStream實現管道的輸入流,而PipedWriter和PipedOutputStream實現輸出流。
2、管道流的創建:
管道流的創建是將管道輸入流和管道輸出流進行掛連。構造方法有下面兩種方式:
PipedInputStream?pInputStream=new?PipedInputStream();
PipedOutputStream?pOutputStream=new?PipedOutputStream(pInputStream);
或者
PipedInputStream?pInputStream=new?PipedInputStream();
PipedOutputStream?pOutputStream=new?PipedOutputStream();
pInputStream.connect(pOutputStream);
pOutputStream.connect(pInputStream);
以上就是動力節點java培訓機構的小編針對“Java中的輸入流與輸出流”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習