JAVA之經常使用I/O操做

在java中,能夠從中讀入一個字節序列的對象叫作輸入流,而能夠向其中下入一個字節序列的對象稱做輸出流。這些字節序列的來源地和目的地一般是文件,但也能夠是網絡鏈接,甚至是內存塊。java

 

其餘編程語言的流類庫的緩衝機制和預覽細節等都是自動處理的。Java須要將多個流過濾器組合以構建真正有用的流序列能力,它有極大的靈活性。編程

 

緩衝區的做用是在輸入流、輸出流在寫入寫出時,不會每次都對設備進行訪問。當緩衝區爲空時,會讀入新的數據塊;當緩衝區滿或被Flush時,數據被寫出。數組

 

    字節流能夠處理全部類型數據,如圖片、視頻等;字符流只能處理純文本網絡

 

讀取操做編程語言

一、Readerspa

(1)BufferedReader3d

從字符流中讀取文本,緩衝各個字符,實現高效率讀取。通常包裝FileReader、InputStreamReader等read開銷高的類,若沒有緩衝區,則read操做會讀取字節並轉換字符返回,效率低效。緩衝區的大小能夠指定,但通常默認夠用。code

(2)InputSreamReader視頻

是字節流通向字符流的橋樑,read方法在底層輸入流中轉換一個或多個字節,要想實現有效的轉換,外層需套上BufferedReader。它能夠指定字符集,不然使用平臺默認字符集。對象

(3)FileReader

用來讀取字符文件。

二、InputStream

(1)從文件中讀取原始字節流,能夠使文本、圖像、視頻等格式。

(2)BufferedInputStream

繼承FilterInputStream,提供緩衝輸入流功能,在建立BufferedInputStream時,會建立一個內部緩衝數組,默認爲8M。與FileInputStream相比,一樣的read方法,執行效率卻更快。

 

讀取操做用例

 

 1 import java.io.BufferedInputStream;  2 import java.io.BufferedReader;  3 import java.io.FileInputStream;  4 import java.io.FileNotFoundException;  5 import java.io.FileReader;  6 import java.io.IOException;  7 import java.io.InputStream;  8 import java.io.InputStreamReader;  9 
10 public class IO讀取用例 { 11 
12     public static void main(String[] args) throws IOException { 13         // TODO Auto-generated method stub
14 
15         BufferedReader br=null; 16         BufferedInputStream bis=null; 17         try { 18             //字符流 19             //讀取字符流時,只有BufferedReader擁有ReadLine()方法 20             //方式一:直接讀取
21             FileReader fr=new FileReader("test.txt"); //2848KB
22             br=new BufferedReader(fr); 23             
24             long t=System.currentTimeMillis(); 25             if(br.ready()){ 26                 while((br.readLine())!=null){ 27                     //TODO:
28  } 29  } 30             t=System.currentTimeMillis()-t; 31             
32             System.out.println("FileReader用時"+t);//50s 33             
34             //方式二:原始字節流轉換讀取
35             InputStream in=new FileInputStream("test.txt"); 36             InputStreamReader isr=new InputStreamReader(in); //轉換
37             br=new BufferedReader(isr); 38             
39             long t2=System.currentTimeMillis(); 40             if(br.ready()){ 41                 while((br.readLine())!=null){ 42                     //TODO:
43  } 44  } 45             t2=System.currentTimeMillis()-t2; 46             
47             System.out.println("FileInputStream用時"+t2); //28s 48             
49             //字節流 50             //方式一:流直接讀取
51             InputStream fis=new FileInputStream("test.txt"); 52             byte[] b=new byte[1024]; //存儲讀取數組
53             
54             long t3=System.currentTimeMillis(); 55             if(fis.available()>0){ 56                 while((fis.read(b))!=-1){ 57                     //TODO:
58  } 59  } 60             t3=System.currentTimeMillis()-t3; 61             System.out.println("BufferedInputStream用時"+t3);//6s 62             
63             //方式二:流套上buffered緩衝讀取
64             bis=new BufferedInputStream(new FileInputStream("test.txt")); 65             b=new byte[1024]; 66             
67             long t4=System.currentTimeMillis(); 68             if(bis.available()>0){ 69                 while((bis.read(b))!=-1){ 70                     //TODO:
71  } 72  } 73             t4=System.currentTimeMillis()-t4; 74             System.out.println("BufferedInputStream用時"+t4);//3s
75             
76         } catch (FileNotFoundException e) { 77  e.printStackTrace(); 78         } finally{ 79  br.close(); 80  bis.close(); 81  } 82         
83  } 84 
85 }

 

 

 

 

寫入操做

一、Writer

(1)BufferedWriter

寫入字符輸出流,緩衝字符。利用緩衝的包裝,能夠實現高效率的寫入。

(2)OutputStreamWriter

是寫入流中字符向字節轉換的橋樑

(3)FileWriter

用於寫入已過濾的字符流的抽象類

二、OutputStream

 (1)FileOutputStream

文件輸出流是用於將圖像數據之類的原始字節流寫入File或FileDescriptor的輸出流。而字符流通常使用FileWriter

(2)BufferedOutputStream

緩衝的輸出流

寫入操做用例

 

 1 import java.io.BufferedInputStream;  2 import java.io.BufferedOutputStream;  3 import java.io.BufferedReader;  4 import java.io.BufferedWriter;  5 import java.io.FileInputStream;  6 import java.io.FileNotFoundException;  7 import java.io.FileOutputStream;  8 import java.io.FileReader;  9 import java.io.FileWriter;  10 import java.io.IOException;  11 import java.io.OutputStreamWriter;  12 
 13 public class IO寫入用例 {  14 
 15     public static void main(String[] args) throws IOException {  16         
 17         BufferedReader br=null;  18         BufferedInputStream bis=null;  19         
 20         BufferedWriter bw=null;  21         BufferedOutputStream bos=null;  22         try {  23             FileReader fr=new FileReader("read.txt"); //51,420KB
 24             br=new BufferedReader(fr);  25  String line;  26             //文本同條件寫入  27             
 28             //方式一 :FileWriter直接寫入 
 29             FileWriter fw=new FileWriter("write.txt");  30             
 31             long t=System.currentTimeMillis();  32             if(br.ready()){  33                 while((line=br.readLine())!=null){  34                     //TODO:
 35  fw.write(line);  36  }  37  }  38             t=System.currentTimeMillis()-t;  39             
 40             System.out.println("BufferedWriter用時"+t);//910s  41             
 42             //方式二 :BufferedWriter緩衝包裝 
 43             br=new BufferedReader(fr);  44             bw=new BufferedWriter(new FileWriter("write.txt"));  45             
 46             long t2=System.currentTimeMillis();  47             if(br.ready()){  48                 while((line=br.readLine())!=null){  49                     //TODO:
 50  bw.write(line);  51  }  52  }  53             t2=System.currentTimeMillis()-t2;  54             
 55             System.out.println("BufferedWriter用時"+t2); //0s  56             
 57             //方式三:原始字節流轉換寫入
 58             br=new BufferedReader(fr);  59             bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("write.txt")));  60             
 61             long t3=System.currentTimeMillis();  62             if(br.ready()){  63                 while((line=br.readLine())!=null){  64                     //TODO:
 65  bw.write(line);  66  }  67  }  68             t3=System.currentTimeMillis()-t3;  69             
 70             System.out.println("BufferedWriter用時"+t3); //0s  71             
 72             //字節流  73             
 74             //方式一:流直接寫入
 75             bis=new BufferedInputStream(new FileInputStream("read.txt"));  76             FileOutputStream fos=new FileOutputStream("write");  77             byte[] b=new byte[10*1024];  78             
 79             long t4=System.currentTimeMillis();  80             if(bis.available()>0){  81                 while((bis.read(b))!=-1){  82                     //TODO:
 83  fos.write(b);  84  }  85  }  86             t4=System.currentTimeMillis()-t4;  87             
 88             System.out.println("InputStream用時"+t4); //143s  89             
 90             //方式二:流套上緩衝寫入
 91             bis=new BufferedInputStream(new FileInputStream("read.txt"));  92             b=new byte[10*1024]; //存儲讀取數組
 93             bos=new BufferedOutputStream(new FileOutputStream("write.txt"));  94                         
 95             long t5=System.currentTimeMillis();  96             if(bis.available()>0){  97                 while((bis.read(b))!=-1){  98                     //TODO:
 99  bos.write(b); 100  } 101  } 102             t5=System.currentTimeMillis()-t5; 103             
104             System.out.println("InputStream用時"+t5); //137s
105             
106         } catch (FileNotFoundException e) { 107  e.printStackTrace(); 108         } finally{ 109  br.close(); 110  bis.close(); 111  bw.close(); 112  bos.close(); 113  } 114         
115 
116  } 117 
118 }
相關文章
相關標籤/搜索