Buffered Reader/Writer字符输入缓冲流

Buffered Reader/Writer字符输入缓冲流

Buffered Reader字符输⼊入缓冲流

  • 为了提高了单个字符读写的效率,进行字符批量的读写;为了提高字符流读写的效率,引入了缓冲机制
  • 采用包装设计模式(锦上添花)
  • BufferedReader
    • 简介:当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并放满缓冲区,而之后若使用read)方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取
    • 构造函数
BufferedReader(Reader in)

BufferedReader(Reader in,int sz)

讲解:创建一个使用指定大小输入缓冲区的缓冲字符输入流。
  • 常用API
boolean ready()
讲解:判断此流是否已准备好被读取,依赖其他流,所以一般需要做判断


int read()
讲解:读取单个字符


int read(char[]cbuf,int off,int len)
讲解:读取一部分字符到数组里面,从数组下标off处放置1ength长度的字符String readLine()

String readLine()
讲解:读取一整行文本行,返回一整行字符串,如果读到行尾了就返回nu11,注意返回的一行字符中不包含换行符


void close()
讲解:关闭流释放资源
  • eg:
package domee.chapter12;

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

public class BufferReaderTest {
     
    public static void main(String[] args) throws IOException {
     
        String dir = "C:\\Users\\123\\Desktop\\test\\BufferReaderTest.txt";
        //test1(dir);
        test2(dir);
    }
    public static void test1(String dir) throws IOException{
     

        //按行读取字符
        BufferedReader bufferedReader = new BufferedReader(new FileReader(dir));

        if (!bufferedReader.ready()){
     
            System.out.println("文件流暂时无法读取");
            return;
        }

        int size ;
        char[] chars = new char[1024];
        while ((size = bufferedReader.read(chars)) != -1  ){
     
            System.out.println(new String(chars,0,size));
        }
        bufferedReader.close();

    }
    public static void test2(String dir) throws IOException{
     

        //按行读取
        BufferedReader bufferedReader = new BufferedReader(new FileReader(dir));

        if (!bufferedReader.ready()){
     
            System.out.println("文件流暂时无法读取");
            return;
        }

        String string;
        while ((string = bufferedReader.readLine()) != null ){
     
            System.out.println(string);
        }
        bufferedReader.close();

    }
}

BufferedWriter字符输出缓冲流

  • BufferedWriter
    • 简介:写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出
    • 构造函数
Bufferedwriter(Writer out)

Bufferedwriter(Writer out,int sz)
  • 常用API
 void write(int c)
讲解:写入一个字符


void write(char[]cbuf,int off,int 1en)
讲解:写入字符数组的一部分,通过off和len控制。


void write(String s,int off,int i)
讲解:写入字符数组的一部分,通过off和len控制)

void newLine()
讲解:写入一个换行符号


void close()
讲解:关闭输入流并释放与该流关联的系统资源


void flush()
讲解:write是写到缓冲区中,可以认为是内存中,当缓冲区满时系统会自动将缓冲区的内容写入文件,但是一般还有一部分有可能会留在内存这个缓冲区中,所以需要调用flush空缓冲区数据。
  • eg(会自动创建文件)
package domee.chapter12;

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

public class BufferWriterTest {
     
    public static void main(String[] args)throws IOException {
     

        String dir = "C:\\Users\\123\\Desktop\\test\\BufferWriterTest.txt";
        test1(dir);

    }
    public static void test1(String dir)throws IOException{
     
        BufferedWriter writer = new BufferedWriter(new FileWriter(dir));
        char ch = '哈';
        String string = "哈哈,早上好";
        String string1 = "你好,世界";
        writer.write(ch);
        writer.write(string,0,string.length());
        writer.newLine();
        writer.write(string1);
        writer.close();//未关闭无法写入
    }

}

你可能感兴趣的:(Java,SE,java,hdfs,stream,os,redis)