流(stream)的概念源於UNIX中管道(pipe)的概念。在UNIX中,管道是一條不間斷的字節流,用來實現程序或進程間的通訊,或讀寫外圍設備、外部文件等。
一個流,必有源端和目的端,它們能夠是計算機內存的某些區域,也能夠是磁盤文件,甚至能夠是Internet上的某個URL。
流的方向是重要的,根據流的方向,流可分爲兩類:輸入流和輸出流。用戶能夠從輸入流中讀取信息,但不能寫它。相反,對輸出流,只能往輸入流寫,而不能讀它。
實際上,流的源端和目的端可簡單地當作是字節的生產者和消費者,對輸入流,可沒必要關心它的源端是什麼,只要簡單地從流中讀數據,而對輸出流,也可不知道它的目的端,只是簡單地往流中寫數據。形象的比喻——水流 ,文件 ======程序 ,文件和程序之間鏈接一個管道,水流就在之間造成了,天然也就出現了方向:能夠流進,也能夠流出.便於理解,這麼定義流: 流就是一個管道里面有流水,這個管道鏈接了文件和程序。
java.io包中的stream類根據它們操做對象的類型是字符仍是字節可分爲兩大類: 字符流和字節流。
Java的字節流InputStream是全部字節輸入流的祖先,而OutputStream是全部字節輸出流的祖先。
Java的字符流Reader是全部讀取字符串輸入流的祖先,而writer是全部輸出字符串的祖先。結合開始所說的輸入/輸出流 ,出現了個一小框架。字節流 字符流
輸入流 InputStream Reader
輸出流 OutputStream Writerjava
JAVA字節流node
要注意的是,構造FileInputStream, 對應的文件必須存在而且是可讀的,而構造FileOutputStream時,如輸出文件已存在,則必須是可覆蓋的。 網絡
該程序接受鍵盤輸入並回顯。對BufferedReader類,該類的readLine()方法能一次從流中讀入一行,但對於BufferedWriter類,就沒有一次寫一行的方法,因此若要向流中一次寫一行,可用PrintWriter類將原來的流改形成新的打印流,PrintWriter類有一個方法println(),能一次輸出一行。如:
............
PrintWriter out = new PrintWriter(new BufferedWriter(
new FileWriter("D:\javacode\test.txt")));
out.println("Hello World!");
out.close();
............
例子:框架
1,與控制檯相關。的讀入/寫出。 實現了字符串的複製。dom
import java.io.*;
public class TextRead{
public static void main(String[] args){
BufferedReader bf = null;/*BufferedReader至關於一個大桶,其實就是內存,這裏實現了大量大量的讀寫 ,而不是讀一個字節或字符就直接寫如硬盤,增強了對硬盤的保護。*/
try{
while(true){ // while(true){}循環保證程序不會結束
bf = new BufferedReader(new InputStreamReader(System.in));
/*System.in 爲標準輸入,System.out爲標準輸出*/
/*InputStreamReader用語將字節流到字符流的轉化,這也就是處理流了
*在這裏至關與2個管道接在System.in與程序之間。
*readLine()方法功能比較好用,也就經過處理流來實現更好功能。
**/
String line = bf.readLine();
System.out.println(line);
}
}catch(Exception e){
e.printStackTrace();
}finally{
//必定要關閉流,用完後。最好放在編碼
filally 裏面。
try{
if(bf!=null){
bf.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}spa
2,與文件 相關的 讀寫。 實現了文件的複製。
import java.io.*;
public class TextRead{
public static void main(String[] args){
File fin,fout;
BufferedReader bf = null;
PrintWriter pw = null;
try{
fin = new File("zzc.txt"); //注意文件與程序都要在同一個文件夾下。zzc.txt爲要被複制的文件。
fout = new File("copyzzc.txt"); //若是沒有會自動建立。
bf = new BufferedReader(new FileReader(fin));
pw = new PrintWriter(fout); //PrintWriter爲打印流,也可使用BufferedWriter.
String line = bf.readLine();
while(line!=null){
pw.println(line);
line = bf.readLine();
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
//關閉 文件。
if(bf!=null){
bf.close();
bf = null;
}
if(pw!=null){
pw.close();
pw = null;
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}code
也是在一個百度好友上看到一篇關於流的文章寫的更詳細,把好多過期的不用的,哪寫經常使用的都分類了,對象
還有好多類:接口
像RandomAccessFile類,序列化接口,都十分重要。
Java有一種特殊類型的IO數據流——DataOutputStream——它能夠保證「不管數據來自何種機器,只要使用一個DataInputStream收取這些數據,就可用本機正確的格式保存它們.
之後在把示例加上,還有寫比較好的方法。
其實感受這已是固定模式了,一提到從鍵盤讀取數據 就會聯想到:
new BufferedReader(new InputStreamReader(System.in))
如今水平達不到,仍是記些固定格式比較好,以致於會用。
某個老師也說過,創新是創建在紮實的基礎之上,愈來愈以爲基礎重要了。