導航:首頁 > 編程語言 > javapipedreader

javapipedreader

發布時間:2023-07-08 03:48:09

java流的主要方法

Java的流操作分為位元組流和字元流兩種。

1、 位元組流

所有的讀操作都繼承自一個公共超類java.io.InputStream類。

所有的寫操作都繼承自一個公共超類java.io.OutputStream類。

InputStream和OutputStream都是抽象類。

InputStream有6個低級輸入流:

低級流
流的用途

ByteArrayInputStream
從內存數組中讀取數據位元組

FileInputStream
從本地文件系統中讀取數據位元組

PipedInputStream
從線程管道中讀取數據位元組

StringBufferInputStream
從字元串中讀取數據位元組

SequenceInputStream
從兩個或多個低級流中讀取數據位元組,當到達流的末尾時從一個流轉到另一個流

System.in
從用戶控制台讀取數據位元組

InputStream還有一個子類:過濾器流java.io.FilterInputStream。過濾器流即能把基本流包裹起來,提供更多方便的用法。

FilterInputStream 類的構造方法為FilterInputStream(InputStream),在指定的輸入流之上,創建一個輸入流過濾器。

過濾器輸入流
流的用途

BufferedInputStream
緩沖區對數據的訪問,以提高效率

DataInputStream
從輸入流中讀取基本數據類型,如int、float、double或者甚至一行文本

LineNumberInputStream
在翻譯行結束符的基礎上,維護一個計數器,該計數器表明正在讀取的是哪一行。

PushbackInputStream
允許把數據位元組向後推到流的首部

2、 字元流

註:是在jdk1.1裡面引進的,上面位元組流是在jdk1.0引進的。當用於處理文本數據時,選擇字元流比位元組流更好。但對只出路基本數據類型的開發者,可以繼續使用位元組流。

所有的讀操作都繼承自一個公共超類java.io.Reader類。

所有的寫操作都繼承自一個公共超類java.io.Writer類。

同樣Reader和Writer也是抽象類。

Reader的常用的子類如下:

低級讀取器
流的用途

CharArrayReader
從字元數組中讀取數據

InputStreamReader

FileReader(InputStreamReader的子類)

從本地文件系統中讀取字元序列

StringReader
從字元串中讀取字元序列

PipedReader
從線程管道中讀取字元序列

InputStreamReader重點講解:

InputStreamReader是從輸入流中讀取數據,連接輸入流於讀取器。如:

new InputStreamReader(System.in)

構造方法:

InputStreamReader(InputStream)

用預設的字元編碼方式,創建一個 InputStreamReader。

InputStreamReader(InputStream, String) 用已命名的字元編碼方式,創建一個 InputStreamReader。 常用的過濾器讀取器:

過濾器讀取器

流的用途

BufferedReader
緩沖數據的訪問,以提高效率

LineNumberReader(BufferedReader的子類)
維護一個計數器,該計數器表明正在讀取的是哪一行。

FilterReader(抽象類)
提供一個類創建過濾器時可以擴展這個類

PushbackReader(FilterReader的子類)
允許把文本數據推回到讀取器的流中

這些過濾器讀取器都可以傳入一個Reader作為構造方法的參數。

⑵ 詳細解讀Java編程中的IO系統


一. Input和Output
1. stream代表的是任何有能力產出數據的數據源,或是任何有能力接收數據的接收源。在Java的IO中,所有的stream(包括Input和Out stream)都包括兩種類型:
1.1 以位元組為導向的stream
以位元組為導向租基的stream,表示以位元組為單位從stream中讀取或往stream中寫入信息。以位元組為導向的stream包括下面
幾種類型:
1) inputstream:
1) ByteArrayInputStream:把內存中的一個緩沖區作為InputStream使用
2) StringBufferInputStream:把一個String對象作為InputStream
3) FileInputStream:把一個文件作為InputStream,實現對文件的讀取操作
4) PipedInputStream:實現了pipe的概念,主要在線程中使用
5) SequenceInputStream:把多個InputStream合並為一個InputStream
2) Outstream
1) ByteArrayOutputStream:把信息存入內存中的一個緩沖區中
2) FileOutputStream:把信息存入文件中
3) PipedOutputStream:實現了pipe的概念,主要在線程中使用
4) SequenceOutputStream:把多個OutStream合並為一個OutStream
1.2 以Unicode字元為導向的stream
以Unicode字元為導向的stream,表示以Unicode字元為單位從stream中讀取或往stream中寫入信息。以Unicode字元為導向的stream包括下面幾種類型:
1) InputStream
1) CharArrayReader:與ByteArrayInputStream對應
2) StringReader:與StringBufferInputStream對應
3) FileReader:與FileInputStream對應
4) PipedReader:與PipedInputStream對應
2) OutStream
1) CharArrayWrite:與ByteArrayOutputStream對應
2) StringWrite:無與之對應的以位元組為導向的stream
3) FileWrite:與FileOutputStream對應
4) PipedWrite:與PipedOutputStream對應
以字元為導向的stream基本上對有與之相對應的以位元組為導向的stream。兩個對應類實現的功能相同,字是在操作時的導向不同。如CharArrayReader:和ByteArrayInputStream的作用都是把內存中的一個緩沖區作為InputStream使用,所不同的是前者每次從內存中讀取一個位元組的信息,而後者每次從內存中讀取一個字元。
1.3 兩種不現導向的stream之間的轉換
InputStreamReader和OutputStreamReader:把一個以位元組為導向的stream轉換成一個以字元為導向的stream。
2. stream添加屬性
2.1 「為stream添加屬性」的作用
運用上面介紹的Java中操作IO的API,我們就可完成我們想完成的任何操作了。但通過FilterInputStream和FilterOutStream的子類,我們可以為stream添加屬性。下面以一個例子來說明這種功能的作用。
如果我們要往一個文件中寫笑宏入數據,我們可以這樣操碰型冊作:
FileOutStreamfs=newFileOutStream(「test.txt」);
然後就可以通過產生的fs對象調用write()函數來往test.txt文件中寫入數據了。但是,如果我們想實現「先把要寫入文件的數據先緩存到內存中,再把緩存中的數據寫入文件中」的功能時,上面的API就沒有一個能滿足我們的需求了。但是通過FilterInputStream和FilterOutStream的子類,為FileOutStream添加我們所需要的功能。
2.2FilterInputStream的各種類型
2.2.1用於封裝以位元組為導向的InputStream
1)DataInputStream:從stream中讀取基本類型(int、char等)數據。
2)BufferedInputStream:使用緩沖區
3)LineNumberInputStream:會記錄inputstream內的行數,然後可以調用getLineNumber()和setLineNumber(int)
4)PushbackInputStream:很少用到,一般用於編譯器開發
2.2.2用於封裝以字元為導向的InputStream
1)沒有與DataInputStream對應的類。除非在要使用readLine()時改用BufferedReader,否則使用DataInputStream
2)BufferedReader:與BufferedInputStream對應
3)LineNumberReader:與LineNumberInputStream對應
4)PushBackReader:與PushbackInputStream對應
2.3FilterOutStream的各種類型
2.2.3用於封裝以位元組為導向的OutputStream
1)DataIOutStream:往stream中輸出基本類型(int、char等)數據。
2)BufferedOutStream:使用緩沖區
3)PrintStream:產生格式化輸出
2.2.4用於封裝以字元為導向的OutputStream
1)BufferedWrite:與對應
2)PrintWrite:與對應
3.RandomAccessFile
1)可通過RandomAccessFile對象完成對文件的讀寫操作
2)在產生一個對象時,可指明要打開的文件的性質:r,只讀;w,只寫;rw可讀寫
3)可以直接跳到文件中指定的位置
4.I/O應用的一個例子
importjava.io.*;
publicclassTestIO{
publicstaticvoidmain(String[]args)
throwsIOException{
//1.以行為單位從一個文件讀取數據
BufferedReaderin=
newBufferedReader(newFileReader("F: epalonTestIO.java"));
Strings,s2=newString();
while((s=in.readLine())!=null)
s2+=s+"";
in.close();
//1b.接收鍵盤的輸入
BufferedReaderstdin=
newBufferedReader(newInputStreamReader(System.in));
System.out.println("Enteraline:");
System.out.println(stdin.readLine());
//2.從一個String對象中讀取數據
StringReaderin2=newStringReader(s2);
intc;
while((c=in2.read())!=-1)
System.out.println((char)c);
in2.close();
//3.從內存取出格式化輸入
try{
DataInputStreamin3=
newDataInputStream(newByteArrayInputStream(s2.getBytes()));
while(true)
System.out.println((char)in3.readByte());
}
catch(EOFExceptione){
System.out.println("Endofstream");
}
//4.輸出到文件
try{
BufferedReaderin4=
newBufferedReader(newStringReader(s2));
PrintWriterout1=
newPrintWriter(newBufferedWriter(newFileWriter("F: epalonTestIO.out")));
intlineCount=1;
while((s=in4.readLine())!=null)
out1.println(lineCount+++":"+s);
out1.close();
in4.close();
}
#p#副標題#e#
catch(EOFExceptionex){
System.out.println("Endofstream");
}
//5.數據的存儲和恢復
try{
DataOutputStreamout2=
newDataOutputStream(newBufferedOutputStream(newFileOutputStream("F: epalonData.txt")));
out2.writeDouble(3.1415926);
out2.writeChars("Thaswaspi:writeChars");
out2.writeBytes("Thaswaspi:writeByte");
out2.close();
DataInputStreamin5=
newDataInputStream(newBufferedInputStream(newFileInputStream("F: epalonData.txt")));
BufferedReaderin5br=
newBufferedReader(newInputStreamReader(in5));
System.out.println(in5.readDouble());
System.out.println(in5br.readLine());
System.out.println(in5br.readLine());
}
catch(EOFExceptione){
System.out.println("Endofstream");
}
//6.通過RandomAccessFile操作文件
RandomAccessFilerf=
newRandomAccessFile("F: epalon test.dat","rw");
for(inti=0;i10
rf.writeDouble(i*1.414);
rf.close();
rf=newRandomAccessFile("F: epalon test.dat","r");
for(inti=0;i10
System.out.println("Value"+i+":"+rf.readDouble());
rf.close();
rf=newRandomAccessFile("F: epalon test.dat","rw");
rf.seek(5*8);
rf.writeDouble(47.0001);
rf.close();
rf=newRandomAccessFile("F: epalon test.dat","r");
for(inti=0;i10
System.out.println("Value"+i+":"+rf.readDouble());
rf.close();
}
}
關於代碼的解釋(以區為單位):
1區中,當讀取文件時,先把文件內容讀到緩存中,當調用in.readLine()時,再從緩存中以字元的方式讀取數據(以下簡稱「緩存位元組讀取方式」)。
1b區中,由於想以緩存位元組讀取方式從標准IO(鍵盤)中讀取數據,所以要先把標准IO(System.in)轉換成字元導向的stream,再進行BufferedReader封裝。
2區中,要以字元的形式從一個String對象中讀取數據,所以要產生一個StringReader類型的stream。
4區中,對String對象s2讀取數據時,先把對象中的數據存入緩存中,再從緩沖中進行讀取;對TestIO.out文件進行操作時,先把格式化後的信息輸出到緩存中,再把緩存中的信息輸出到文件中。
5區中,對Data.txt文件進行輸出時,是先把基本類型的數據輸出屋緩存中,再把緩存中的數據輸出到文件中;對文件進行讀取操作時,先把文件中的數據讀取到緩存中,再從緩存中以基本類型的形式進行讀取。注意in5.readDouble()這一行。因為寫入第一個writeDouble(),所以為了正確顯示。也要以基本類型的形式進行讀取。
6區是通過RandomAccessFile類對文件進行操作。
#p#副標題#e#

⑶ JAVA的輸入輸出流有多少種

怎麼還匿名提問呢,呵呵 下面給你圖,自己看下就知道,在這里強調幾個問題。

1.輸入流和輸出流是完全兩個類,沒必要說一個就要帶上另一個,這里不是說你這么問有錯,只是希望使用的時候別有誤解,怕你在代碼里使用輸入,就總想著使用輸出。

2.IO流操作分為字元流和位元組流,聽名字就知道字元流是以字元為單位,位元組流以位元組為單位。

那為什麼要區分呢?電腦中只有位元組傳輸,因為電腦中都是二進制數據。但是這里要字元流主要原因是當我們需要操作只有文本文檔的時候,就是沒有圖片,視頻這種二進制的,用我們的眼睛可以看懂的英文漢子這種純文本,用字元流操作會快。java中字元按unicode編碼,一個字元占兩個位元組。那字元流操作一個單位至少一個字元,算兩個位元組,速度自然快,只是僅限於操作純文本。(比如下MP3就位元組流,下歌詞自然字元流)你的問題:看下圖:

先說位元組流中輸入,輸出

通過名字就知道操作什麼的。比如FileInputStream很明顯是講文件作為流資源,既然是輸入流,肯定是從文件里讀取內容了。

⑷ Java中流的分類都有哪些

位元組流類
抽象父類: InputStream,OutputStream
實現類包括如下幾種:
BufferedInputStream 緩沖流-過慮流
BufferedOutputStream
ByteArrayInputStream 位元組數組流-節點流
ByteArrayOutputStream
DataInputStream 處理JAVA標准數據流-過慮流
DataOutputStream
FileInputStream 處理文件IO流-節點流
FileOutputStream
FilterInputStream 實現過慮流-位元組過慮流父類
FilterOutputStream
PipedInputStream 管道流
PipedOutputStream
PrintStream 包含print() 和 println()
RandomAccessFile 支持隨機文件
字元流
抽象父類:Reader, Writer

閱讀全文

與javapipedreader相關的資料

熱點內容
3d定製女僕2解包工具 瀏覽:885
修改tomcat進程名稱linux 瀏覽:354
程序員男友愛你的表現 瀏覽:586
少兒編程課程為什麼那麼貴 瀏覽:19
網路評選一般有哪些 瀏覽:476
2021三支一扶報名數據在哪裡看 瀏覽:914
網路未備案怎麼打得開 瀏覽:987
計算機程序用什麼編程語言 瀏覽:324
linux入門常用命令 瀏覽:497
江寧區哪裡有數控編程培訓 瀏覽:778
java寫一個shape形狀類 瀏覽:744
win7如何設置word背景顏色 瀏覽:484
如何創造電腦編程語言 瀏覽:56
昂達平板電腦圖形密碼忘記怎麼辦 瀏覽:92
組織文件內容是什麼 瀏覽:183
0基礎如何學習智能編程 瀏覽:366
java程序員全攻略下載 瀏覽:715
網路逆向教程 瀏覽:135
iso文件如何重裝系統 瀏覽:750
ghost鏡像文件路徑如何恢復 瀏覽:832

友情鏈接