zoukankan      html  css  js  c++  java
  • Java IO流之字符缓冲流

    字符流:

    1、加入字符缓存流,增强读取功能(readLine)

    2、更高效的读取数据

    BufferedReader

    从字符输入流读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。   

    FileReader:内部使用InputStreamReader,解码过程,byte->char,默认缓存大小为8k

    BufferReader:默认缓存大小为8k,但可以手动指定缓存大小,把数据读取到缓存中,减少每次转换过程,效率更高

    //字符输入缓冲流
    	private static void charReader() {
    		//目标文件
    		File file = new File("F:\javatest\lemon1.txt");
    		try {
    			//字符流
    			Reader reader = new FileReader(file);
    			//为字符流提供缓冲,已达到高效读取的目的
    			BufferedReader bufr = new BufferedReader(reader);
    			
    			char[] chars = new char[1024];
    			int len = -1;
    			while((len = bufr.read(chars)) != -1) {
    				System.out.println(new String(chars,0,len));
    			}
                bufr.close();
    				
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    

      

    BufferedWriter

    将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入

    FileWriter:内部使用InputStreamWriter,解码过程,byte->char,默认缓存大小为8k

    BufferWriter:默认缓存大小为8k,但可以手动指定缓存大小,把数据读取到缓存中,减少每次转换过程,效率更高

    //字符输出缓存流
    	private static void charWriter() {
    		//目标文件
    		File file = new File("F:\javatest\lemon1.txt");
    		try {
    			//字符流
    			Writer writer = new FileWriter(file,true);//追加
    			//为字符流提供缓冲,已达到高效读取的目的
    			BufferedWriter bufr = new BufferedWriter(writer);
    			bufr.write("这里是字符缓冲流
    ");
    			bufr.flush();
    			bufr.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    

      

    总结:

    package com.lemon;
     
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.Reader;
    import java.io.Writer;
    /**
     * 缓存的目的:
     * 解决在写入文件操作时,频繁的操作文件所带来的性能降低问题
     * BufferedOutputStream内部默认的缓存大小是8kb,每次写入时存储到缓存中的byte数组中,当数组存满时,会把数组中的数据写入文件
     * 并且缓存下标归零 
     * 
     * 字符流:
     * 1、加入字符缓存流,增强读取功能(readLine)
     * 2、更高效的读取数据
     * FileReader:内部使用InputStreamReader,解码过程,byte->char,默认缓存大小为8k
     * BufferReader:默认缓存大小为8k,但可以手动指定缓存大小,把数据读取到缓存中,减少每次转换过程,效率更高
     * BufferedWriter:同上
     * @author lemonSun
     *
     * 2019年5月4日下午8:12:53
     */
    public class BufferStreamDemo {
     
    	public static void main(String[] args) {
    	//	byteWriter();
    	//	byteReader();
    //		byteReader1();
    //		charReader();
    		charWriter();
    	}
    	
    	//字符输出缓存流
    	private static void charWriter() {
    		//目标文件
    		File file = new File("F:\javatest\lemon1.txt");
    		try {
    			//字符流
    			Writer writer = new FileWriter(file,true);//追加
    			//为字符流提供缓冲,已达到高效读取的目的
    			BufferedWriter bufr = new BufferedWriter(writer);
    			bufr.write("这里是字符缓冲流
    ");
    			bufr.flush();
    			bufr.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	
    	//字符输入缓存流
    	private static void charReader() {
    		//目标文件
    		File file = new File("F:\javatest\lemon1.txt");
    		try {
    			//字符流
    			Reader reader = new FileReader(file);
    			//为字符流提供缓冲,已达到高效读取的目的
    			BufferedReader bufr = new BufferedReader(reader);
    			
    			char[] chars = new char[1024];
    			int len = -1;
    			while((len = bufr.read(chars)) != -1) {
    				System.out.println(new String(chars,0,len));
    			}
    			bufr.close();
    				
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	
    	//缓存流输入 不用关闭 try自动关闭 必须实现Closeable接口
    	private static void byteReader1(){
    		//目标文件
    		File file = new File("F:\javatest\lemon1.txt");
    		
    		//buf作用域在try大括号里面多条语句try(;),;隔开 
    		try(BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file))) {	
    			byte[] bytes = new byte[1024];
    			int len = -1;
    			while((len = buf.read(bytes)) != -1) {
    				System.out.println(new String(bytes,0,len));
    			}
    		
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    	}
    	
    	//缓存流输入
    	private static void byteReader(){
    		//目标文件
    		File file = new File("F:\javatest\lemon1.txt");
    		
    		try {
    			//字节输出流
    			InputStream in = new FileInputStream(file);
    			//字节缓冲流
    			BufferedInputStream buf = new BufferedInputStream(in);
    			byte[] bytes = new byte[1024];
    			int len = -1;
    			while((len = buf.read(bytes)) != -1) {
    				System.out.println(new String(bytes,0,len));
    			}
    			buf.close();//自动关闭 in.close
    		
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    	}
    	
    	
    	//缓存流输出
    	private static void byteWriter(){
    		//目标文件
    		File file = new File("F:\javatest\lemon1.txt");
    		
    		try {
    			//字节输出流
    			OutputStream out = new FileOutputStream(file,true);
    			//缓冲流
    			BufferedOutputStream buf = new BufferedOutputStream(out);
    			//内容
    			String info = "这里是缓冲流
    ";
    			//写入
    			buf.write(info.getBytes());
    			buf.close(); //jdk1.7以后自动关闭 out
    		//	out.close();
    				
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    	}
     
    }
    

      


    原文:https://blog.csdn.net/LemonSnm/article/details/89819829

  • 相关阅读:
    mysql replication常见错误整理
    enq: TX
    LOGMNR分析redo log和archive log教程
    使用create datafile... as ...迁移数据文件到裸设备
    mysql无法启动,报错 Can't start server: can't create PID file: No space left on device
    MYSQL 权限设置查询
    ORA-02437 违反主键
    oracle sequence的用法
    sequence有关问题
    关于Relay Log无法自动删除的问题
  • 原文地址:https://www.cnblogs.com/qbdj/p/10856070.html
Copyright © 2011-2022 走看看