Java中的流

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();  
相關文章
相關標籤/搜索