IO-字符流的缓冲区

为什么要用缓冲区?意义在于提高读写效率

对应类

  BufferedWriter

  BufferedReader

缓冲区要结合流来使用,它是在流的基础上加强流的功能

简单说明:

 流是水,Buffered是蓄水池。这样就提高了流的操作效率。但是,在操作缓存区前,必须要有流对象

事例:BufferedWriter

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;


public class BufferedDemo {
       public static void main(String[] args) throws IOException {
        //创建写入流对象
           FileWriter fw=new FileWriter("demo1.txt");
    //缓冲技术的原理在于它对数组的封装
           BufferedWriter buff=new BufferedWriter(fw);
          buff.write("nihaoa");
          //记住,缓冲区必须flush后才有东西
          buff.flush();
          //缓冲区关闭等价于fw.close(),所以不用加fw.close();
          buff.close();
       }
}

事例:BufferedReader

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;


public class BufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        //创建流对象
        FileReader fr=new FileReader("demo.txt");
        BufferedReader buff=new BufferedReader(fr);
        //readLine()读一行,返回字符串,达到末尾返回null
        String line=null;
        while((line=buff.readLine())!=null){
        
        System.out.println(line);
        }
        buff.close();
        
    }

}

事例:利用BufferedReader和BufferedWriter把demo1.txt写到BufferedDemo.txt中(重要)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class BufferReaderDemo3 {
    public static void main(String[] args) {
        FileReader fr=null;
        FileWriter fw=null;
        BufferedReader bufr=null;
        BufferedWriter bufw=null;
        try{
         fr=new FileReader("demo1.txt");
         fw=new FileWriter("BufferedDemo.txt");
         
          bufr=new BufferedReader(fr);
          bufw=new BufferedWriter(fw);
          String line=null;
//但是readLine()还是读1个写1个
while((line=bufr.readLine())!=null){ bufw.write(line); bufw.newLine(); bufw.flush(); } }catch(IOException e){ throw new RuntimeException("读写失败"); } finally{ try{ if(bufr!=null) bufr.close(); } catch(IOException e){} } try{ if(bufw!=null) bufw.close(); } catch(IOException e){} } }

///////////////////////

字节流

 基类:

OutputStream   InputStream

子类:

FileOutStream

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


public class FileStream {
  public static void main(String[] args) throws IOException {
    FileOutputStream fos=new FileOutputStream("fos.txt");
    fos.write("abcd".getBytes());
    //在这里不需要刷新,但凡流都要关闭
    fos.close();
}
}

需要:复制一个图片(文件)

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


public class PictureDemo {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos=new FileOutputStream("ee.jpg");
       FileInputStream fis=new FileInputStream("ejb.jpg");
    byte []buf=new byte[1024];
    int ch=0;
    while((ch=fis.read())!=-1){
        fos.write(ch);
        
    }
    fos.close();
    fis.close();
    }

}

事例:读取键盘输入

当录入一行数据后,就将该行数据进行打印;如果录入的数据是over,那么停止录入

import java.io.IOException;
import java.io.InputStream;


public class ReadIn {
    public static void main(String[] args) throws IOException {
        InputStream in= System.in;    
        StringBuilder sb=new StringBuilder();
          while(true){           
              int ch=in.read();
              //遇到换行符就打印
              if(ch=='
')
                  continue;
              if(ch=='
'){
                  String s=sb.toString();
             if("over".equals(s))
                 break;
             System.out.println(s.toUpperCase());
             sb.delete(0,sb.length());
              }
              else{ 
              char c=(char)ch;
              sb.append(c);
              }
              
              
              
              
          }
}
}
原文地址:https://www.cnblogs.com/chenqr/p/6424104.html