1、Java中流的原理java
流是個抽象的概念,是對輸入輸出設備的抽象,Java程序中,對於數據的輸入/輸出操做都是以「流」的方式進行。設備能夠是文件,網絡,內存等。數組
四種基本流InputStream,OutputStream,Reader,Writer又分別有更具體的子類,分爲文件流,緩衝流,數據流,轉換流,Print流,Object流等,都分別有特定的功能或用來操做特定的數據。緩存
2、字節流網絡
2.1 InputStreamapp
繼承自InputStream的流用於向程序中輸入數據,且數據的單位是8bit。dom
代碼示例:函數
1 public static void main(String[] args) throws IOException{ 2 3 File f=new File("f:\\a.txt"); 4 if(f.exists()){ 5 System.out.println("文件存在"); 6 }else{ 7 f.createNewFile();//用於建立文件 8 //f.setReadOnly(); 9 System.out.println(f.getName()+"文件是否可讀:"+f.canRead()); 10 System.out.println(f.getName()+"文件是否可寫:"+f.canWrite()); 11 } 12 13 InputStream in=new FileInputStream(f); 14 int data=in.read(); 15 while(data!=-1) 16 { 17 char e = (char)data; 18 System.out.print(e + " "); 19 data = in.read(); 20 } 21 22 }
read()方法是一個字節一個字節地往外讀,每讀取一個字節,就處理一個字節。read(byte[] buffer)方法讀取數據時,先把讀取到的數據填滿這個byte[]類型的數組buffer(buffer是內存裏面的一塊緩衝區),而後再處理數組裏面的數據。編碼
2.二、OutputStreamspa
OutputStream和InputStream相對應爲字節輸出流,用於向外部設備例如文件中寫數據code
代碼示例:
1 File f=new File("f:\\a.txt"); 2 if(f.exists()){ 3 System.out.println("文件存在"); 4 }else{ 5 f.createNewFile();//用於建立文件 6 //f.setReadOnly(); 7 System.out.println(f.getName()+"文件是否可讀:"+f.canRead()); 8 System.out.println(f.getName()+"文件是否可寫:"+f.canWrite()); 9 } 10 11 OutputStream out=new FileOutputStream(f); 12 String str="Hello world!"; 13 byte[] b=str.getBytes(); 14 out.write(b); 15 out.flush(); 16 out.close();
write(byte[] b):將 b.length
個字節從指定的 byte 數組寫入此輸出流。
write(byte[] b, int off, int len):將指定 byte 數組中從偏移量 off
開始的 len
個字節寫入此輸出流。
write(int b):將指定的字節寫入此輸出流,b爲ascll碼。
2.三、字節緩衝流
3、字符流
字節流和字符流的區別就是讀取方式一個爲按字節讀取,一個是按字符讀取。在讀取文件想對文件內容進行處理,好比修改某一行的時候通常使用字符流,二僅僅是讀取文件通常使用字節流。
3.一、Reader流和writer流
代碼示例:
1 import java.io.File; 2 import java.io.FileReader; 3 import java.io.FileWriter; 4 import java.io.IOException; 5 6 public class wr { 7 8 public static void main(String[] args) throws IOException{ 9 File f=new File("f:\\a.txt"); 10 if(f.exists()){ 11 System.out.println("文件存在"); 12 }else{ 13 f.createNewFile();//用於建立文件 14 //f.setReadOnly(); 15 System.out.println(f.getName()+"文件是否可讀:"+f.canRead()); 16 System.out.println(f.getName()+"文件是否可寫:"+f.canWrite()); 17 } 18 19 FileWriter fw = new FileWriter(f); 20 String str="asdw"; 21 fw.write(str);//向文件中寫入asdw 22 fw.write(str,0,2);//向文件中寫入as 23 char c='a'; 24 fw.write(c);//向文件中寫入a 25 fw.flush();//使用字符流必需要對緩存進行刷新才能向文件中寫入內容 26 fw.close();//調用close()函數時自動對緩存進行刷新 27 //注意,OutputStream中還有append()方法能夠對文件內容進行追加輸出,詳見Java API。 28 29 FileReader fr = new FileReader(f); 30 int b=0,num=0; 31 while((b = fr.read())!= -1){ 32 System.out.print((char)b ); 33 num++; 34 } 35 System.out.println("輸出了"+num+"個字符!"); 36 } 37 38 }
3.2 字符緩衝流
帶有緩衝區的,緩衝區(Buffer)就是內存裏面的一小塊區域,讀寫數據時都是先把數據放到這塊緩衝區域裏面,最後對緩衝區內容統一操做,減小io對硬盤的訪問次數,保護咱們的硬盤。
-BufferedWriter bw = new BufferedWriteer(fw);
-BufferedReader br = new BufferedReader(fr);
1 import java.io.BufferedReader; 2 import java.io.BufferedWriter; 3 import java.io.File; 4 import java.io.FileReader; 5 import java.io.FileWriter; 6 7 public class Buffertry { 8 9 public static void main(String args[]){ 10 11 try{ 12 File f=new File("f:\\a.txt"); 13 if(f.exists()){ 14 System.out.println("文件存在"); 15 }else{ 16 f.createNewFile();//用於建立文件 17 //f.setReadOnly(); 18 System.out.println(f.getName()+"文件是否可讀:"+f.canRead()); 19 System.out.println(f.getName()+"文件是否可寫:"+f.canWrite()); 20 } 21 22 BufferedWriter bw = new BufferedWriter(new FileWriter(f)); 23 String s = null; 24 for(int i=0;i<100;i++){ 25 s = String.valueOf(Math.random());//「Math.random()」將會生成一系列介於0~1之間的隨機數。 26 bw.write(s); 27 bw.newLine();//調用newLine()方法使得每寫入一個隨機數就換行顯示 28 } 29 bw.flush();//調用flush()方法清空緩衝區 30 31 BufferedReader br = new BufferedReader(new FileReader(f)); 32 while((s = br.readLine())!=null){ 33 //使用BufferedReader處理流裏面提供String readLine()方法讀取文件中的數據時是一行一行讀取的 34 System.out.println(s); 35 } 36 bw.close(); 37 br.close(); 38 }catch(Exception e){ 39 e.printStackTrace(); 40 } 41 } 42 }
3.三、轉換流
字節輸入流轉換爲字符輸入流:InputStreamReader是字節流轉化爲字符流的橋樑,它將字節去出而且按照指定方式解碼爲字符,構造方法爲
InputStreamReader(InputStream in);//詳見Java API
字節輸出流轉換爲字符輸出流:OutputStreamWriter繼承自Writer,能夠將指定寫入流中的字符編碼爲字節
OutputStreamWriter(OutputStream out);//詳見Java API
1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStreamReader; 4 5 public class changetry { 6 7 public static void main(String[] args) throws IOException{ 8 9 InputStreamReader isr=new InputStreamReader(System.in); 10 BufferedReader br = new BufferedReader(isr); 11 System.out.println("請輸入:"); 12 String str=br.readLine(); 13 System.out.println("輸入內容:"+str); 14 15 } 16 17 }
1 File f=new File("f:\\a.txt"); 2 FileOutputStream fos = new FileOutputStream(f); 3 OutputStreamWriter os = new OutputStreamWriter(fos); 4 BufferedWriter bos = new BufferedWriter(os); 5 bos.write("hahahaha"); 6 bos.close(); 7 os.close(); 8 fos.close();