flushjava
『壹』 java ByteArrayOutputStream flush
flush
public void flush()throws IOException
刷新此輸出流並強制寫出所有緩沖的輸出位元組。flush 的常規協定是:如果此輸出流的實現已經緩沖了以前寫入的任何位元組,則調用此方法指示應將這些位元組立即寫入它們預期的目標。
什麼是預期的目標?比如對於輸入出流FileOutputStream("1.txt"),文件"1.txt"就是它預期的目標。上體請看下面的程序。
import java.io.*;
public class AboutFlush
{
public static void main(String args[]){
try{
FileInputStream fis=new FileInputStream("1.pdf");
FileOutputStream fos=new FileOutputStream("2.pdf");
byte b[]=new byte[20];
int number;
while((number=fis.read(b))!=-1){
fos.write(b, 0, number);
//flush 你也可以在這里用。但一般不提倡
//將數據先存入緩沖區有利於提高效率
//不過,有時是必要的。
}
fos.flush();//這里,是指將所有的數據,全部寫入輸出流"2.pdf"
fis.close();
fos.close();
}catch(IOException e){}
}
}
//當然,對於ByteArrayOutputStream來說,它的目標是一個數組,將數據寫入
//這個數組。當然,最後可以一次性寫入一個輸出流(用writeTo方法)。那麼
//它的過程是:自主地將數據先寫入數組,再全部寫入某個輸出流。那麼,flush
//貌似沒有意義了。因為,對於寫入內存數組來說,不可能再先緩存進某個
//緩沖區(那樣沒什麼意義)。而ByteArrayOutputStream的預期目標肯定是
//在創建對象時隱式生成的數組緩沖區,而不可能是writeTo的對象(因為這個
//對象是可變的,只有在寫入時才指定)。所以,俺認為flush對於
//ByteArrayOutputStream來說,沒有意義
『貳』 java bufferedwriter flush 必要性問題
public class BufferedWriterextends Writer將文本寫入字元輸出流,緩沖各個字元,從而提供單個字元、數組和字元串的高效寫入。
可以指定緩沖區的大小,或者接受默認的大小。在大多數情況下,默認值就足夠大了。
flush是刷新該流的緩沖,就是將緩沖區里的內容全部刷出去, 這與大緩沖區大小無關。而該類提供的 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系統屬性 line.separator 定義。並非所有平台都使用新行符 ('\n') 來終止各行。因此調用此方法來終止每個輸出行要優於直接寫入新行符。
以上主要來自java api