缓冲流和普通的流有什么区别,缓冲流什么情况下会自动刷新。能不能给一个使用缓冲流但是没有手动刷新而造成程序执行不正确的小例子。

解决方案 »

  1.   

    BufferedReader : 可以读完一行(遇到换行符),程序可以按行读取处理
                         如果是串口数据,可以一次调用获取完整的输入(内部可能分多次处理)inputStream:字节流,自己控制
                         串口数据的话,则有一个读一个,自己判断本次是否结束个人理解,仅供参考
      

  2.   

    不用缓冲流的话,读或者写数据是一个字节一个字节进行操作,效率慢使用缓冲流但是没有手动刷新而造成程序执行不正确的小例子:
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
    public class Test {
    public static void main(String[] args) {
    try {
    PrintWriter pw=new PrintWriter(new FileOutputStream(new File("E:\\abc.txt")));
    pw.println("123");


    //不刷新的话,123是无法写到文件中的
    // pw.flush();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    }
    }}
      

  3.   

        普通流,可以叫节点流,又叫原始流,你可以想象成一根管道。普通流有默认的内存缓冲区,不过相对缓冲流主动设置的缓冲区,普通流使用起来肯定没有缓冲流快。
        缓冲流是处理流又叫包裹流,顾名思义这个流一定要建立在原始流的基础上,你可以想象成在原始流这根官道外面再包裹一根管道。相对于普通流来说,它的内存缓冲区是主动设置的,你可以想象主动的当然比被动的快。
        有些书上说使用输出流的close()功能时,会自动调用flush()功能,有些书上又说一定要使用flush(),而且如果不用flush()很多时候输出流的目的地不会有任何你想给他的变化。所以我们最好在使用close()之前,一定使用flush()。
    例子:
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;public class TestBufferedInputStream
    {
    public static void main(String[] args)
    {
    File file=new File("");
            File file1=new File("");
    BufferedInputStream bis=null;
            BufferedOutputStream bos=null;
           try{ bis=new BufferedInputStream(new FileInputStream(file));
            bos=new BufferedOutputStream(new FileOutputStream(file1));
            byte[] buf=new byte[1024];
            int len;
            len=bis.read(buf);
            while(-1!=len)
            {
             bos.write(buf,0,len);
             len=bis.read(buf);
            }}catch(FileNotFoundException e)
            {
            
            }catch(IOException e)
            {
            
            }finally
            {
             try
    {
             bos.flush();
    bos.close();
    bis.close();
    } catch (IOException e)
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
            
            }
            
            
    }
    }
    文件路径你自己设置,bos.flush()自己去掉试试看,建议用两个文件,一个大一点,一个小一点,多用几个总归有点用吧