zoukankan      html  css  js  c++  java
  • 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);
                  }
                  
                  
                  
                  
              }
    }
    }
  • 相关阅读:
    一个让echarts中国地图包含省市轮廓的技巧
    安装MySql for Visual Studio的坑
    EasyUI文档学习心得
    《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想
    U3D自定义Inspector项未触发保存事件的解决方案
    ANT自动打包U3D安卓项目研究笔记
    HipChat上传文件报未知错误解决方案
    Unity3D读取模型文件自动生成AnimatorController简单实例
    较友好的Web文件下载用户体验实例
    Cocos2dx 3.x包含ext库报错解决
  • 原文地址:https://www.cnblogs.com/chenqr/p/6424104.html
Copyright © 2011-2022 走看看