BufferedInputStream是帶緩沖區的輸入流,默認緩沖區大小是8M,能夠減少訪問磁盤的次數,提高文件讀取性能;BufferedOutputStream是帶緩沖區的輸出流,能夠提高文件的寫入效率。BufferedInputStream與BufferedOutputStream分別是FilterInputStream類和FilterOutputStream類的子類,實現了裝飾設計模式。
BufferedInputStream類的例子如下:
1 import java.io.File; 2 import java.io.InputStream; 3 import java.io.FileInputStream; 4 import java.io.BufferedInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.IOException; 7 import java.text.SimpleDateFormat; 8 import java.util.Date; 9 10 public class BufferedInputStreamDemo01{ 11 12 // 聲明常量 13 public static final int SIZE=1024; 14 15 public static void main(String[] args){ 16 //變量聲明 17 File f=null; 18 InputStream input=null; 19 BufferedInputStream bis=null; 20 StringBuilder strBuild=null; 21 SimpleDateFormat sdf=null; 22 Date d=null; 23 long start=0L; 24 long end=0L; 25 26 try{ 27 sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 28 29 strBuild=new StringBuilder(); 30 start=System.currentTimeMillis(); 31 d=new Date(); 32 if(d!=null){ 33 d.setTime(start); 34 } 35 System.out.println("程序開始執行時間:"+sdf.format(d)); 36 37 f=new File("d:"+File.separator+"demo.txt"); 38 input=new FileInputStream(f); 39 // 指定文件帶緩沖區的讀取流且指定緩沖區大小為2KB 40 bis=new BufferedInputStream(input,2*SIZE); 41 int bisLength=bis.available(); 42 int readLength=0; 43 byte[] byteArray=new byte[SIZE]; 44 int tmp=0; 45 while((tmp=bis.read(byteArray))!=-1){ 46 strBuild.append(new String(byteArray,0,tmp)); 47 System.out.println("每次讀取字節數量:"+tmp); 48 System.out.println("文件中剩余字節數:"+input.available()); 49 } 50 51 System.out.println(String.format("文件的大小:%d,緩沖區讀取流返回的大小:%d",f.length(),bisLength)); 52 System.out.println("文件的內容:"+strBuild.toString()); 53 System.out.println("字符串長度:"+strBuild.toString().length()); 54 char[] cTmp=strBuild.toString().toCharArray(); 55 System.out.println("字符串->字符數組長度:"+cTmp.length); 56 57 end=System.currentTimeMillis(); 58 d=new Date(); 59 if(d!=null){ 60 d.setTime(end); 61 } 62 System.out.println("程序執行的結束時間:"+sdf.format(d)); 63 System.out.println("<-------------******************---------------->"); 64 System.out.println("程序執行時間(ms):"+(end-start)+"毫秒"); 65 66 }catch(FileNotFoundException ex){ 67 ex.printStackTrace(); 68 }catch(IOException ex){ 69 ex.printStackTrace(); 70 }finally{ 71 try{ 72 if(input!=null){ 73 input.close(); 74 } 75 if(bis!=null){ 76 bis.close(); 77 } 78 }catch(IOException ex){ 79 ex.printStackTrace(); 80 } 81 } 82 } 83 }
BufferedOutputStream類的例子如下:
1 import java.io.File; 2 import java.io.OutputStream; 3 import java.io.FileOutputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.FileNotFoundException; 6 import java.io.IOException; 7 import java.sql.Connection; 8 import java.sql.DriverManager; 9 import java.sql.PreparedStatement; 10 import java.sql.ResultSet; 11 import java.sql.SQLException; 12 13 public class BufferedOutputStreamDemo01{ 14 public static final int SIZE=1024; 15 public static final String DRIVERNAME="oracle.jdbc.driver.OracleDriver"; 16 public static final String DBURL="jdbc:oracle:thin:@IP:1521:DB名稱"; 17 public static final String USERNAME="用戶名"; 18 public static final String PASSWORD="密碼"; 19 20 static{ 21 try{ 22 // 加載驅動程序 23 Class.forName(DRIVERNAME); 24 }catch(ClassNotFoundException ex){ 25 ex.printStackTrace(); 26 } 27 } 28 29 public static void main(String[] args){ 30 // 變量聲明 31 File f=null; 32 OutputStream output=null; 33 BufferedOutputStream bos=null; 34 Connection con=null; 35 PreparedStatement pst=null; 36 ResultSet rs=null; 37 StringBuilder strBuild=null; 38 39 try{ 40 String sql=" select vendor_no,vendor_name,address,phone,email,zipcode from VENDOR"; 41 42 con=new BufferedOutputStreamDemo01().getConnection(); 43 // 獲得數據庫操作類 44 pst=new BufferedOutputStreamDemo01().getPst(con,sql); 45 // 獲得結果集 46 rs=pst.executeQuery(); 47 48 f=new File("F:"+File.separator+"tmp.txt"); 49 output=new FileOutputStream(f,false); 50 bos=new BufferedOutputStream(output,SIZE*4); 51 52 while(rs.next()){ 53 strBuild=new StringBuilder(); 54 55 // 店號 56 strBuild.append(rs.getString("vendor_no")); 57 strBuild.append(","); 58 59 // 店名 60 strBuild.append(rs.getString("vendor_name")); 61 strBuild.append(","); 62 63 // 地址 64 strBuild.append(rs.getString("address")); 65 strBuild.append(","); 66 67 // 電話 68 strBuild.append(rs.getString("phone")); 69 strBuild.append(","); 70 71 // 郵件 72 strBuild.append(rs.getString("email")); 73 strBuild.append(","); 74 75 // 郵政編碼 76 strBuild.append(rs.getString("zipcode")); 77 strBuild.append("\n"); 78 79 bos.write(strBuild.toString().getBytes("utf-8")); 80 } 81 82 }catch(IOException ex1){ 83 ex1.printStackTrace(); 84 }catch(SQLException ex){ 85 ex.printStackTrace(); 86 }finally{ 87 try{ 88 // 關閉流 89 if(output!=null){ 90 output.close(); 91 } 92 if(bos!=null){ 93 bos.close(); 94 } 95 //關閉數據庫連接 96 if(rs!=null){ 97 rs.close(); 98 } 99 if(pst!=null){ 100 pst.close(); 101 } 102 if(con!=null){ 103 con.close(); 104 } 105 }catch(IOException ex){ 106 ex.printStackTrace(); 107 }catch(SQLException ex){ 108 ex.printStackTrace(); 109 } 110 } 111 } 112 113 /** 114 **獲得數據庫連接 115 ** 116 **/ 117 public static Connection getConnection(){ 118 Connection con=null; 119 try{ 120 // 獲得數據庫連接 121 con=DriverManager.getConnection(DBURL,USERNAME,PASSWORD); 122 }catch(SQLException ex){ 123 ex.printStackTrace(); 124 } 125 126 return con; 127 } 128 129 /** 130 **獲得數據庫操作類 131 **/ 132 public static PreparedStatement getPst(Connection con,String sql){ 133 PreparedStatement pst=null; 134 try{ 135 pst=con.prepareStatement(sql); 136 }catch(SQLException ex){ 137 ex.printStackTrace(); 138 } 139 140 return pst; 141 } 142 }