BufferedInputStream是帶緩沖區的輸入流,預設緩沖區大小是8M,能夠減少通路磁盤的次數,提高檔案讀取性能;BufferedOutputStream是帶緩沖區的輸出流,能夠提高檔案的寫入效率。BufferedInputStream與BufferedOutputStream分别是FilterInputStream類和FilterOutputStream類的子類,實作了裝飾設計模式。
BufferedInputStream類的例子如下:
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class BufferedInputStreamDemo01{
// 聲明常量
public static final int SIZE=1024;
public static void main(String[] args){
//變量聲明
File f=null;
InputStream input=null;
BufferedInputStream bis=null;
StringBuilder strBuild=null;
SimpleDateFormat sdf=null;
Date d=null;
long start=0L;
long end=0L;
try{
sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
strBuild=new StringBuilder();
start=System.currentTimeMillis();
d=new Date();
if(d!=null){
d.setTime(start);
}
System.out.println("程式開始執行時間:"+sdf.format(d));
f=new File("d:"+File.separator+"demo.txt");
input=new FileInputStream(f);
// 指定檔案帶緩沖區的讀取流且指定緩沖區大小為2KB
bis=new BufferedInputStream(input,2*SIZE);
int bisLength=bis.available();
int readLength=0;
byte[] byteArray=new byte[SIZE];
int tmp=0;
while((tmp=bis.read(byteArray))!=-1){
strBuild.append(new String(byteArray,0,tmp));
System.out.println("每次讀取位元組數量:"+tmp);
System.out.println("檔案中剩餘位元組數:"+input.available());
}
System.out.println(String.format("檔案的大小:%d,緩沖區讀取流傳回的大小:%d",f.length(),bisLength));
System.out.println("檔案的内容:"+strBuild.toString());
System.out.println("字元串長度:"+strBuild.toString().length());
char[] cTmp=strBuild.toString().toCharArray();
System.out.println("字元串->字元數組長度:"+cTmp.length);
end=System.currentTimeMillis();
d=new Date();
if(d!=null){
d.setTime(end);
}
System.out.println("程式執行的結束時間:"+sdf.format(d));
System.out.println("<-------------******************---------------->");
System.out.println("程式執行時間(ms):"+(end-start)+"毫秒");
}catch(FileNotFoundException ex){
ex.printStackTrace();
}catch(IOException ex){
ex.printStackTrace();
}finally{
try{
if(input!=null){
input.close();
}
if(bis!=null){
bis.close();
}
}catch(IOException ex){
ex.printStackTrace();
}
}
}
}
BufferedOutputStream類的例子如下:
import java.io.File;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BufferedOutputStreamDemo01{
public static final int SIZE=1024;
public static final String DRIVERNAME=”oracle.jdbc.driver.OracleDriver”;
public static final String DBURL=”jdbc:oracle:thin:@IP:1521:DB名稱”;
public static final String USERNAME=”使用者名”;
public static final String PASSWORD=”密碼”;
static{
try{
// 加載驅動程式
Class.forName(DRIVERNAME);
}catch(ClassNotFoundException ex){
ex.printStackTrace();
}
}
public static void main(String[] args){
// 變量聲明
File f=null;
OutputStream output=null;
BufferedOutputStream bos=null;
Connection con=null;
PreparedStatement pst=null;
ResultSet rs=null;
StringBuilder strBuild=null;
try{
String sql=" select vendor_no,vendor_name,address,phone,email,zipcode from VENDOR";
con=new BufferedOutputStreamDemo01().getConnection();
// 獲得資料庫操作類
pst=new BufferedOutputStreamDemo01().getPst(con,sql);
// 獲得結果集
rs=pst.executeQuery();
f=new File("F:"+File.separator+"tmp.txt");
output=new FileOutputStream(f,false);
bos=new BufferedOutputStream(output,SIZE*4);
while(rs.next()){
strBuild=new StringBuilder();
// 店号
strBuild.append(rs.getString("vendor_no"));
strBuild.append(",");
// 店名
strBuild.append(rs.getString("vendor_name"));
strBuild.append(",");
// 位址
strBuild.append(rs.getString("address"));
strBuild.append(",");
// 電話
strBuild.append(rs.getString("phone"));
strBuild.append(",");
// 郵件
strBuild.append(rs.getString("email"));
strBuild.append(",");
// 郵政編碼
strBuild.append(rs.getString("zipcode"));
strBuild.append("\n");
bos.write(strBuild.toString().getBytes("utf-8"));
}
}catch(IOException ex1){
ex1.printStackTrace();
}catch(SQLException ex){
ex.printStackTrace();
}finally{
try{
// 關閉流
if(output!=null){
output.close();
}
if(bos!=null){
bos.close();
}
//關閉資料庫連接配接
if(rs!=null){
rs.close();
}
if(pst!=null){
pst.close();
}
if(con!=null){
con.close();
}
}catch(IOException ex){
ex.printStackTrace();
}catch(SQLException ex){
ex.printStackTrace();
}
}
}
/**
**獲得資料庫連接配接
**
**/
public static Connection getConnection(){
Connection con=null;
try{
// 獲得資料庫連接配接
con=DriverManager.getConnection(DBURL,USERNAME,PASSWORD);
}catch(SQLException ex){
ex.printStackTrace();
}
return con;
}
/**
**獲得資料庫操作類
**/
public static PreparedStatement getPst(Connection con,String sql){
PreparedStatement pst=null;
try{
pst=con.prepareStatement(sql);
}catch(SQLException ex){
ex.printStackTrace();
}
return pst;
}
}
以上帶緩沖區的輸入輸出流執行個體希望對初學者有所幫助,望批評指正!