1. 如何使用Java 輸出,輸出流讀寫數據.pdf
Java.io是大多數面向數據流的輸入/輸出類的主要軟體包。這個軟體包包含了兩個抽象類,InputStream和OutputStream。
所有其它面象數據流的輸入/輸出類都要擴展這兩個基類。 java.io軟體包提供了一些類和介面,它們在由InputStream和OuputStream類提供的讀寫操作的頂端定義了一些有用的抽象。
2. java 數據流的readInt()怎麼判斷是否讀到了文件尾
一般RAF和位元組流用int read()讀取文件,一次只能讀取一個int值的低八位,當讀到文件末尾時可以用-1表示,int readInt(),一次讀取4個位元組,用-1已經不能表示文件末尾了,因為用4個位元組可以表示-1,所以用readInt讀到文件末尾時,會直接拋異常,即EOFException(end of file),文件到達末尾異常
3. Java數據流。。。
你要看清楚,已經是很清晰的代碼了!!!
◇◇◇位元組流——InputStream,OutputStream◇◇◇
「流」就像一根管道
位元組流表示管道中只能通過「位元組數據」
InputStream 位元組輸入流:從InputStream派生出去可以創建「位元組數據輸入流對象」的所有類,如FileInputStream,BufferedInputStream(發動機),ByteArray+InputStream,Data+InputStream,Object+InputStream
都繼承了「讀取位元組read()」方法,都能讀取磁碟文件
OutputStream位元組輸出流:從OutputStream派生出去可以創建「位元組數據輸出流對象」的所有類,如FileOutputStream,BufferedOutputStream(發動機),ByteArray+OutputStream,Data+OutputStream,Object+OutputStream
都繼承了「寫入位元組write()」方法,都能寫入磁碟文件
◇◇◇字元流——Reader,Writer◇◇◇
「流」就像一根管道
字元流表示管道中只能通過「字元數據」
Reader 字元輸入流:從Reader派生出去可以創建「字元數據輸入流對象」的所有類,如FileReader,BufferedReader(發動機),CharArrayReader,String+Reader,InputStreamReader
都繼承了「讀取字元read()」方法,都能讀取磁碟文件
Writer 字元輸出流:從Writer派生出去可以創建「字元數據輸出流對象」的所有類,如FileWriter,BufferedWriter(發動機),CharArrayWriter,StringWriter,OutputStreamWriter
都繼承了「寫入字元write()」方法,都能寫入磁碟文件◎FileOutputStream 位元組輸出流寫文件◎
位元組數據:byte 定義的變數就是位元組數據
FileOutputStream就是寫「位元組數據」到文件中的類(只能寫入「位元組數據」,如果不是「位元組數據」就需要轉換getBytes()方法轉換成位元組數據)
public class Maintest
{
public static void main(String[] args)
{
FileOutputStream fos=null;
try
{
fos=new FileOutputStream("G:\\a.txt");
byte word=65; //byte定義的word變數是位元組數據,可以直接寫入
fos.write(word);
String str="早上好啊"; //String定義的是字元數據,要用getBytes()轉換成位元組數據,再用byte定義變數接收
byte[] words=str.getBytes();
fos.write(words);
System.out.println("寫入成功!");
fos.close();
}
catch(IOException e)
{
}
}
}
◎FileWriter 字元輸出流寫文件◎
FileWriter有write()方法,寫入字元數據到輸出流文件中但效率不高,一般只用於打開路徑,而「用BufferedWriter來寫入」,BufferedWriter bw=new BufferedWriter(fw)「緩沖高效寫入字元輸出流文件」的類
public class Maintest
{
public static void main(String[]args)
{
FileWriter fw=null;
try
{
fw=new FileWriter("G:\\a.txt");
BufferedWriter bw=new BufferedWriter(fw);
String str="寫入的是字元,可以直接寫入"; //FileWriter寫入的是字元數據,就是不用getbytes()轉換成位元組數據了
bw.write(str);
System.out.println("寫入成功");
bw.close();
}
catch(IOException e)
{
}
}
}
至於FileInputStream和FileReader也是這樣相對而言的,就像FileOutputSteam和FileWriter一樣你邊對比邊理解就能看懂了
4. JAVA中的「流」一般用在什麼地方
一般用在數據的讀寫(讀取和寫入)操作中
5. java位元組輸入流讀取數據的過程是怎麼樣的
FileInputStream類的:int read() 從此輸入流中讀取一個數據位元組
文件1.txt中的每個「1」為一個字元對應一個位元組,則讀取的是字元'1',其對應的int型為49,則輸出為49
要想輸出1.txt中的內容,可參考以下程序:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
/**
*
* @author top
*/
public class Fin {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
// TODO code application logic here
FileInputStream fis = new FileInputStream("D:/1.txt");
InputStreamReader ir = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(ir);
String s;
while ((s=br.readLine())!=null) {
System.out.println(s);
s=br.readLine();
}
}
}
6. 如何使用Java 輸出,輸出流讀寫數據
在「面向對象編程: J a v a c o l l e c t i o n 更有效管理 e l e m e n t s 」一文中,我們討論了 J a v a 集合類架構中的類和功能並介紹了它的排序功能。在本文中,我們將學習 J a v a 平台 提供的這些 I / O 類,介面和操作。讓我們先從了解 J a v a 數據流開始。數據流 J a v a 所有的 I / O 機制都是基於數據流的,這些數據流表示了字元或者位元組數據的流動序列。 J a v a 的 I / O 流提供了讀寫數據的標准方法。任何 J a v a 中表示數據源的對象都會提供以數據流的方式讀寫它的數據的方法。 J a v a . i o 是大多數面向數據流的輸入 / 輸出類的主要軟體包。這個軟體包包含了兩個抽象類, I n p u t S t r e a m 和 O u t p u t S t r e a m 。所有其它面象數據流的輸入 / 輸出類都要擴展這兩個基類。 j a v a . i o 軟體包提供了一些類和介面,它們在由 I n p u t S t r e a m 和 O u p u t S t r e a m 類提供的讀寫操作的頂端定義了一些有用的抽象。例如, O b j e c t I n p u t S t r e a m 類提供了讓你把輸入 / 輸出流中的數據當成對象來讀取的方法,而 O b j e c t O u t p u t S t r e a m 類提供了讓你能夠把 J a v a 對象寫入數據流中的方法。優化讀寫過程 J D K 1 . 1 增加了一套讀寫類,它們提供了比現有數據流類更有用的抽象和更好的輸入 / 輸出性能。例如, B u f f e r e d R e a d e r 和 B u f f e r e d W r i t e r 類被用來從基於字元的輸入和輸出流中讀取和寫入文本。 B u f f e r d R e a d e r 類緩存字元以更高效的讀取字元串,數組和文本行。 B u f f e r e d W r i t e r 類緩存字元以更高效的寫入字元串,數組和文本行。 B u f f e r e d R e a d e r 和 B u f f e r e d W r i t e r 類可以按需求進行設置。 浪曦網 - 國內頂級 I T 視頻網路編程教育平台 W w w . L a n g S i n . C o m 浪曦網 - 國內頂級 I T 視頻網路編程教育平台 W w w . L a n g S i n . C o m J a v a 輸入 / 輸出架構提供的讀取器和寫入器類包括 L i n e N u m b e r R e a d e r 類, C h a r A r r a y R e a d e r 類, F i l e R e a d e r 類, F i l t e r R e a d e r 類, P u s h b a c k R e a d e r 類, P i p e d R e a d e r 類, S t r i n g R e a d e r 類以及其它一些類。這些類是在 I n p u t S t r e a m 和 O u p u t S t r e a m 類頂部的包裹類因此提供了與 I n p u t S t r e a m 和 O u p u t S t r e a m 類相似的方法。但是,這些類為讀寫特定的對象,比方文件,字元數組和字元串等等提供了更高效而有用的抽象。讀取數據當你從一個相應的數據源對象里提取輸入流或者是創建一個讀取器對象的時候就會自動打開一個輸入流。例如,要為一個文件打開輸入流,我們只需要以下面的方式把文件名傳遞給 J a v a . i o . F i l e R e a d e r 對象的構造函數: j a v a . i o . F i l e R e a d e r f i l e R e a d e r = n e w j a v a . i o . F i l e R e a d e r ( " / h o m e / m e / m y f i l e . t x t " ) ; 要按順序讀取 F i l e R e a d e r 底層的輸入流中的一個位元組數據,只需要使用不帶參數的 r e a d 方法。表 A 中的代碼段從一個文件讀取文本數據,一次一個字元,然後把它寫入 S y s t e m . o u t 里。要從輸入流讀取指定數目的位元組數據到 c h a r 數組里,只需要使用帶一個 c h a r [ ] 參數的 r e a d 方法 。數組的長度被用來確定應該讀取的字元的個數。表 B 演示了這個技術。要關閉一個輸入流以及這個流使用的所有系統資源,你只需要以下面的方式調用 c l o s e 方法: f i l e R e a d e r . c l o s e ( ) ; 寫入數據象一個輸入流一樣,輸出流通常在你從相應的數據源提取它或者是在你創建一個寫入對象的時候被自動的打開。例如,要為一個文件打開輸出流,我們把文件的名字傳遞給 j a v a . i o . F i l e W r i t e r 對象的構造函數,如下所示: j a v a . i o . F i l e W r i t e r f i l e W r i t e r = n e w 浪曦網 - 國內頂級 I T 視頻網路編程教育平台 W w w . L a n g S i n . C o m 浪曦網 - 國內頂級 I T 視頻網路編程教育平台 W w w . L a n g S i n . C o m j a v a . i o . F i l e W r i t e r ( " / h o m e / m e / o u t . t x t " ) ; 要將一個特定的字元寫入到輸出流中,可以使用帶一個 i n t 參數的 w r i t e 方法, i n t 參數代表要定入的字元。 i n t a C h a r = ( i n t ) " X " ; f i l e W r i t e r . w r i t e ( a C h a r ) ; 要在輸出流給定的偏移地址寫入一個 c h a r 數組中特定數目的字元,你可以使用帶一個 c h a r [ ] 參數,一個 i n t 偏移量參數和一個 i n t 長度參數的 w r i t e 方法,如下面的例子所示: f i l e W r i t e r . w r i t e ( b u f f e r , 0 , b y t e C o u n t ) ; 要關閉一個輸出流並釋放所有與之相關的系統資源,可以使用 c l o s e 方法,就象這樣: f i l e W r i t e r . c l o s e ( ) ; 要強迫寫出一個輸出流中的所有數據,可以使用下面的 f l u s h 方法: f i l e W r i t e r . f l u s h ( ) ; 把它們全部綜合起來我們可以使用我們學習過的這些函數從一個文件中讀取數據並同時寫到另一個文件中去,如表 C 所示。 浪曦網 - 國內頂級 I T 視頻網路編程教育平台 W w w . L a n g S i n . C o m 浪曦網 - 國內頂級 I T 視頻網路編程教育平台 W w w . L a n g S i n . C o m 總結 J a v a 的輸入 / 輸出機制為從不同的數據源讀取和寫入字元增加了一套簡單而標准化的 A P I 。你對一種數據源使用 J a v a 流的經驗能夠讓你容易的使用其它由 J a v a 提供的數據源類型。在我們下一篇文章中,我們將會開始學習 J a v a 平台的聯網和遠程通訊架構。我們將會把我們對 J a v a 流的討論擴展到這些環境並演示如何打開遠程數據源,並象操作本地數據源,比方文件一樣,寫入數據和讀取數據 J a v a 輸入 / 輸出( I / O )機制提供了一套簡單的,標准化的 A P I 以便從不同的數據源讀取和寫入字元和位元組數據。在「面向對象編程: J a v a c o l l e c t i o n 更有效管理 e l e m e n t s 」一文中,我們討論了 J a v a 集合類架構中的類和功能並介紹了它的排序功能。在本文中,我們將學習 J a v a 平台提供的這些 I / O 類,介面和操作。讓我們先從了解 J a v a 數據流開始。數據流 J a v a 所有的 I / O 機制都是基於數據流的,這些數據流表示了字元或者位元組數據的流動序列。 J a v a 的 I / O 流提供了讀寫數據的標准方法。任何 J a v a 中表示數據源的對象都會提供以數據流的方式讀寫它的數據的方法。 J a v a . i o 是大多數面向數據流的輸入 / 輸出類的主要軟體包。這個軟體包包含了兩個抽象類, I n p u t S t r e a m 和 O u t p u t S t r e a m 。所有其它面象數據流的輸入 / 輸出類都要擴展這兩個基類。 j a v a . i o 軟體包提供了一些類和介面,它們在由 I n p u t S t r e a m 和 O u p u t S t r e a m 類提供的讀寫操作的頂端定義了一些有用的抽象。例如, O b j e c t I n p u t S t r e a m 類提供了讓你把輸入 / 輸出流中的數據當成對象來讀取的方法,而 O b j e c t O u t p u t S t r e a m 類提供了讓你能夠把 J a v a 對象寫入數據流中的方法。優化讀寫過程 J D K 1 . 1 增加了一套讀寫類,它們提供了比現有數據流類更有用的抽象和更好的輸入 / 輸出性能。例如, B u f f e r e d R e a d e r 和 B u f f e r e d W r i t e r 類被用來從基於字元的輸入和輸出流中讀取和寫入文本。 B u f f e r d R e a d e r 類緩存字元以更高效的讀取字元串,數組和文本行。 B u f f e r e d W r i t e r 類緩存字元以更高效的寫入字元串,數組和文本行。 B u f f e r e d R e a d e r 和 B u f f e r e d W r i t e r 類可以按需求進行設置。 J a v a 輸入 / 輸出架構提供的讀取器和寫入器類包括 L i n e N u m b e r R e a d e r 類, C h a r A r r a y R e a d e r 類, F i l e R e a d e r 類, F i l t e r R e a d e r 類, P u s h b a c k R e a d e r 類, P i p e d R e a d e r 類, S t r i n g R e a d e r 類以及其它一些類。這些類是在 I n p u t S t r e a m 和 O u p u t S t r e a m 類頂部的包裹類因此提供了與 I n p u t S t r e a m 和 O u p u t S t r e a m 類相似的方法。但是,這些類為讀寫特定的對象,比方文件,字元數組和字元串等等提供了更高效而有用的抽象。讀取數據當你從一個相應的數據源對象里提取輸入流或者是創建一個讀取器對象的時候就會自動打開一個輸入流。例如,要為一個文件打開輸入流,我們只需要以下面的方式把文件名傳遞給 J a v a . i o . F i l e R e a d e r 對象的構造函數: j a v a . i o . F i l e R e a d e r f i l e R e a d e r = n e w j a v a . i o . F i l e R e a d e r ( " / h o m e / m e / m y f i l e . t x t " ) ; 要按順序讀取 F i l e R e a d e r 底層的輸入流中的一個位元組數據,只需要使用不帶參數的 r e a d 方法。表 A 中的代碼段從一個文件讀取文本數據,一次一個字元,然後把它寫入 S y s t e m . o u t 里。要從輸入流讀取指定數目的位元組數據到 c h a r 數組里,只需要使用帶一個 c h a r [ ] 參數的 r e a d 方法。數組的長度被用來確定應該讀取的字元的個數。表 B 演示了這個技術。要關閉一個輸入流以及這個流使用的所有系統資源,你只需要以下面的方式調用 c l o s e 方法: f i l e R e a d e r . c l o s e ( ) ; 寫入 數據象一個輸入流一樣,輸出流通常在你從相應的數據源提取它或者是在你創建一個寫入對象的時候被自動的打開。例如,要為一個文件打開輸出流,我們把文件的名字傳遞給 j a v a . i o . F i l e W r i t e r 對象的構造函數,如下所示: j a v a . i o . F i l e W r i t e r f i l e W r i t e r = n e w j a v a . i o . F i l e W r i t e r ( " / h o m e / m e / o u t . t x t " ) ; 要將一個特定的字元寫入到輸出流中,可以使用帶一個 i n t 浪曦網 - 國內頂級 I T 視頻網路編程教育平台 W w w . L a n g S i n . C o m 浪曦網 - 國內頂級 I T 視頻網路編程教育平台 W w w . L a n g S i n . C o m 參數的 w r i t e 方法, i n t 參數代表要定入的字元。 i n t a C h a r = ( i n t ) " X " ; f i l e W r i t e r . w r i t e ( a C h a r ) ; 要在 輸出流給定的偏移地址寫入一個 c h a r 數組中特定數目的字元,你可以使用帶一個 c h a r [ ] 參數,一個 i n t 偏移量參數和一個 i n t 長度參數的 w r i t e 方法,如下面的例子所示: f i l e W r i t e r . w r i t e ( b u f f e r , 0 , b y t e C o u n t ) ; 要關閉一個輸出流並釋放所有與之相關的系統資源,可以使用 c l o s e 方法,就象這樣: f i l e W r i t e r . c l o s e ( ) ; 要強迫寫出一個輸出流中的所有數據,可以使用下面的 f l u s h 方法: f i l e W r i t e r . f l u s h ( ) ; 把它們全部綜合起來我們可以使用我們學習過的這些函數從一個文件中讀取數據並同時寫到另一個文件中去,如表 C 所示。總結 J a v a 的輸入 / 輸出機制為從不同的數據源讀取和寫入字元增加了一套簡單而標准化的 A P I 。你對一種數據源使用 J a v a 流的經驗能夠讓你容易的使用其它由 J a v a 提供的數據源類型。在我們下一篇文章中,我們將會開始學習 J a v a 平台 的聯網和遠程通訊架構。我們將會把我們對 J a v a 流的討論擴展到這些環境並演示如何打開遠程數據源,並象操作本地數據源,比方文件一樣,寫入數據和讀取數據
7. 如何使用Java 輸出/輸出流進行讀寫數據
在「面向對象編程:Java collection更有效管理elements」一文中,我們討論了Java 集合類架構中的類和功能並介紹了它的排序功能。在本文中,我們將學習Java 平台提供的這些I/O類,介面和操作。讓我們先從了解Java 數據流開始。 數據流 Java所有的I/O機制都是基於數據流的,這些數據流表示了字元或者位元組數據的流動序列。Java的I/O流提供了讀寫數據的標准方法。任何Java中表示數據源的對象都會提供以數據流的方式讀寫它的數據的方法。 Java.io是大多數面向數據流的輸入/輸出類的主要軟體包。這個軟體包包含了兩個抽象類,InputStream和OutputStream。所有其它面象數據流的輸入/輸出類都要擴展這兩個基類。 java.io軟體包提供了一些類和介面,它們在由InputStream和OuputStream類提供的讀寫操作的頂端定義了一些有用的抽象。例如,ObjectInputStream類提供了讓你把輸入/輸出流中的數據當成對象來讀取的方法,而ObjectOutputStream類提供了讓你能夠把Java對象寫入數據流中的方法。 優化讀寫過程 JDK 1.1 增加了一套讀寫類,它們提供了比現有數據流類更有用的抽象和更好的輸入/輸出性能。例如,BufferedReader和BufferedWriter 類被用來從基於字元的輸入和輸出流中讀取和寫入文本。BufferdReader 類緩存字元以更高效的讀取字元串,數組和文本行。BufferedWriter類緩存字元以更高效的寫入字元串,數組和文本行。BufferedReader和BufferedWriter 類可以按需求進行設置。 Java輸入/輸出架構提供的讀取器和寫入器類包括 LineNumberReader 類,CharArrayReader類,FileReader類,FilterReader類,PushbackReader類,PipedReader類,StringReader類以及其它一些類。這些類是在InputStream和OuputStream類頂部的包裹類因此提供了與InputStream和OuputStream類相似的方法。但是,這些類為讀寫特定的對象,比方文件,字元數組和字元串等等提供了更高效而有用的抽象。 讀取數據 當你從一個相應的數據源對象里提取輸入流或者是創建一個讀取器對象的時候就會自動打開一個輸入流。例如,要為一個文件打開輸入流,我們只需要以下面的方式把文件名傳遞給Java.io.FileReader對象的構造函數: java.io.FileReader fileReader = new java.io.FileReader("/home/me/myfile.txt".net/forum/images/smiles/icon_wink.gif border=0>; 要按順序讀取FileReader底層的輸入流中的一個位元組數據,只需要使用不帶參數的read方法。表A中的代碼段從一個文件讀取文本數據,一次一個字元,然後把它寫入System.out里。 要從輸入流讀取指定數目的位元組數據到char數組里,只需要使用帶一個char[]參數的read方法。數組的長度被用來確定應該讀取的字元的個數。表B演示了這個技術。 要關閉一個輸入流以及這個流使用的所有系統資源,你只需要以下面的方式調用close方法: fileReader.close(); 寫入數據 象一個輸入流一樣,輸出流通常在你從相應的數據源提取它或者是在你創建一個寫入對象的時候被自動的打開。例如,要為一個文件打開輸出流,我們把文件的名字傳遞給java.io.FileWriter對象的構造函數,如下所示: java.io.FileWriter fileWriter = new java.io.FileWriter("/home/me/out.txt".net/forum/images/smiles/icon_wink.gif border=0>; 要將一個特定的字元寫入到輸出流中,可以使用帶一個int參數的write方法,int參數代表要定入的字元。 int aChar = (int)'X'; fileWriter.write(aChar); 要在輸出流給定的偏移地址寫入一個char數組中特定數目的字元,你可以使用帶一個char[]參數,一個int 偏移量參數和一個int長度參數的write方法,如下面的例子所示: fileWriter.write(buffer, 0, byteCount); 要關閉一個輸出流並釋放所有與之相關的系統資源,可以使用close方法,就象這樣: fileWriter.close(); 要強迫寫出一個輸出流中的所有數據,可以使用下面的flush方法: fileWriter.flush(); 把它們全部綜合起來 我們可以使用我們學習過的這些函數從一個文件中讀取數據並同時寫到另一個文件中去,如表C所示。 總結Java的輸入/輸出機制為從不同的數據源讀取和寫入字元增加了一套簡單而標准化的API。你對一種數據源使用Java流的經驗能夠讓你容易的使用其它由Java提供的數據源類型。 在我們下一篇文章中,我們將會開始學習Java平台的聯網和遠程通訊架構。我們將會把我們對Java流的討論擴展到這些環境並演示如何打開遠程數據源,並象操作本地數據源,比方文件一樣,寫入數據和讀取數據
8. java中的「流」是什麼
流是個抽象的概念,是對輸入輸出設備的抽象,java程序中,對於數據的輸入/輸出操作都是以「流」的方式進行。設備可以是文件,網路,內存等。
流具有方向性,至於是輸入流還是輸出流則是一個相對的概念,一般以程序為參考,如果數據的流向是程序至設備,我們成為輸出流,反之我們稱為輸入流。
可以將流想像成一個「水流管道」,水流就在這管道中形成了,自然就出現了方向的概念。
當程序需要從某個數據源讀入數據的時候,就會開啟一個輸入流,數據源可以是文件、內存或網路等等。相反地,需要寫出數據到某個數據源目的地的時候,也會開啟一個輸出流,這個數據源目的地也可以是文件、內存或網路等等。
可以從不同的角度對流進行分類:
1.
處理的數據單位不同,可分為:字元流,位元組流
2.數據流方向不同,可分為:輸入流,輸出流
3.功能不同,可分為:節點流,處理流
1.
和
2.
都比較好理解,對於根據功能分類的,可以這么理解:
節點流:節點流從一個特定的數據源讀寫數據。即節點流是直接操作文件,網路等的流,例如fileinputstream和fileoutputstream,他們直接從文件中讀取或往文件中寫入位元組流。
處理流:「連接」在已存在的流(節點流或處理流)之上通過對數據的處理為程序提供更為強大的讀寫功能。過濾流是
使用一個已經存在的輸入流或輸出流連接創建的,過濾流就是對節點流進行一系列的包裝。例如bufferedinputstream和
bufferedoutputstream,使用已經存在的節點流來構造,提供帶緩沖的讀寫,提高了讀寫的效率,以及datainputstream和
dataoutputstream,使用已經存在的節點流來構造,提供了讀寫java中的基本數據類型的功能。他們都屬於過濾流。
來源:
http://www.cnblogs.com/shitouer/archive/2012/12/19/2823641.html
9. java輸入流中的數據流讀自哪裡將寫到哪裡
輸出流:從內存讀取並寫到文件中去
輸入流:從文件讀到內存中
10. java中的流是什麼
流是個抽象的概念,是對輸入輸出設備的抽象,Java程序中,對於數據的輸入/輸出操作都是以「流」的方式進行。設備可以是文件,網路,內存等。
流具有方向性,至於是輸入流還是輸出流則是一個相對的概念,一般以程序為參考,如果數據的流向是程序至設備,我們成為輸出流,反之我們稱為輸入流。
可以將流想像成一個「水流管道」,水流就在這管道中形成了,自然就出現了方向的概念。
當程序需要從某個數據源讀入數據的時候,就會開啟一個輸入流,數據源可以是文件、內存或網路等等。相反地,需要寫出數據到某個數據源目的地的時候,也會開啟一個輸出流,這個數據源目的地也可以是文件、內存或網路等等。
可以從不同的角度對流進行分類:
1. 處理的數據單位不同,可分為:字元流,位元組流
2.數據流方向不同,可分為:輸入流,輸出流
3.功能不同,可分為:節點流,處理流
1. 和 2. 都比較好理解,對於根據功能分類的,可以這么理解:
節點流:節點流從一個特定的數據源讀寫數據。即節點流是直接操作文件,網路等的流,例如FileInputStream和FileOutputStream,他們直接從文件中讀取或往文件中寫入位元組流。
處理流:「連接」在已存在的流(節點流或處理流)之上通過對數據的處理為程序提供更為強大的讀寫功能。過濾流是
使用一個已經存在的輸入流或輸出流連接創建的,過濾流就是對節點流進行一系列的包裝。例如BufferedInputStream和
BufferedOutputStream,使用已經存在的節點流來構造,提供帶緩沖的讀寫,提高了讀寫的效率,以及DataInputStream和
DataOutputStream,使用已經存在的節點流來構造,提供了讀寫Java中的基本數據類型的功能。他們都屬於過濾流。
來源:
http://www.cnblogs.com/shitouer/archive/2012/12/19/2823641.html