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);
                  }
                  
                  
                  
                  
              }
    }
    }
  • 相关阅读:
    [Cocos2d-x]Cocos2d-x开发中C++调用Object-c
    [数据结构]基本概念
    [Cocos2d-x]Mac下运行HelloCpp For Android
    [Android] JDK , NDK , JNI
    [Cocos2d-x]坐标系
    [Android]mac下开发环境搭建
    [Cocos2d-x]博客推荐
    nyoj-506-洗澡
    nyoj-479-Coprimes
    nyoj-464-Cookies
  • 原文地址:https://www.cnblogs.com/chenqr/p/6424104.html
Copyright © 2011-2022 走看看