Java-缓冲流

一、缓冲流概述

缓冲流:增强基本流的功能,在基本流的基础上演变而来。
按照数据类型进行分类分为:
字节缓冲流:BufferedInputStrem  BufferedOutputStream
字符缓冲流:BufferedReader  BufferedWriter

缓冲流的基本原理:是在创建流对象时会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统的IO次数,提高读写的效率。

二、字节缓冲输出流BufferedOutputStream

字节缓冲输出流构造方法:
  BufferedOutputStream(OutputStream out):创建一个新的缓冲输出流。
   OutputStream out:字节输出流对象
 BufferedOutputStream(OutputStream out, int size)创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。
   OutputStream out;字节输出流对象
   int size:指定字节缓冲区大小,不指定使用默认值
其它常用成员方法可以使用父类OutputStream中常用方法:
 public void close():关闭此输出流并释放与此流相关联的任何系统资源。
 public void flush():刷新此输出流并强制任何缓冲的输出字节流。
 public void write(byte[] b):将b.lengh字节从指定的字节数组写入输出流。一次性写入多个字节,如果写的第一个字节是正数(0-127),显示的时候会查询ASCII表,如果写的第一个字节是负数 ,那么第一个字节会和第二个字节,两个字节组成一个中文显示,查询系统默认编码表(简体中文是GBK)。
 public void write(byte[] b,int off,int len):从指定的字节数组写入len字节,从偏移量off(开始的索引)开始输出到此输出流。
  public void write(int b):将指定的字节写入输出流。

使用方法:
 1.创建一个FileoutputStream对象,指定数据输出路径。
 2.创建一个BufferedOutputStream对象,构造方法中传递FileoutputStream对象,和指定缓冲区大小,不指定则使用默认值。
 3.调用BufferedOutputStream对象的write方法,把数据写入到缓冲区中。
 4.使用BufferedOutputStream对象的flush方法,将缓冲区中的数据刷新到指定路径的文件中去。
 5.释放资源,在调用close方法之前,其实会先调用flush方法,将数据刷新到文件中去,所以第4步可选择性省略。

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class IoDemo09 {
	public static void main(String[] args) throws IOException {
		//1.创建一个FileoutputStream对象,指定数据输出路径
		FileOutputStream out = new FileOutputStream("D:\\eclipse\\eclipse\\example\\study\\io\\1.txt");
		//2.创建一个BufferedOutputStream对象,构造方法中传递FileoutputStream对象,和指定缓冲区大小,不指定则使用默认值
        BufferedOutputStream bout = new BufferedOutputStream(out,100);
        //3.调用BufferedOutputStream对象的write方法,把数据写入到缓冲区中
        //写入单个数据
       // bout.write(97);//a
        //写入一个字节数组
        byte[] bytes = {98,99,97};
        bout.write(bytes);//bca
        //写入一个字节数组的指定长度部分
       // bout.write(bytes, 0, 1);//a
        
        // 4.使用BufferedOutputStream对象的flush方法,将缓冲区中的数据刷新到指定路径的文件中去
        bout.flush();
        //5.释放资源,在调用close方法之前,其实会先调用flush方法,将数据刷新到文件中去,所以第4步可选择性省略
        out.close();
        bout.close();
        
	}

}

三、字节缓冲输入流BufferedInputStream

构造方法:
 BufferedInputStream(InputStream in)创建一个BufferedInputStream并保存其参数,输入流 in ,供以后使用。
  InputStream in;字节输入流对象
 BufferedInputStream(InputStream in, int size)创建 BufferedInputStream具有指定缓冲区大小,并保存其参数,输入流 in ,供以后使用。
  InputStream out;字节输入流对象
  int size:指定字节缓冲区大小,不指定使用默认值
常用方法继承自父类InputStream:
 int read():从输入流中读取数据的下一个字节,读取到文件末尾返回-1。
 int read(byte[] b):从输入流中读取一定数量的字节,并将其存入缓冲区数组b中。
 void close():关闭此输入流并释放有关的所有系统资源。

使用步骤:
 1.创建一个InputStream流对象,构造方法中指定读取的路径或者文件。
 2.创建BufferedInputStream对象,构造方法中传入InputStream流对象,可以指定大小,也可以不写,使用默认值。
 3.调用BufferedInputSteram的read方法,进行文件的读取。
 4.释放资源。

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class IoDemo10 {
	public static void main(String[] args) throws IOException {
		// 1.创建一个InputStream流对象,构造方法中指定读取的路径或者文件
		FileInputStream f = new FileInputStream("D:\\eclipse\\eclipse\\example\\study\\io\\1.txt");
		//2.创建BufferedInputStream对象,构造方法中传入InputStream流对象,可以指定大小,也可以不写,使用默认值
		BufferedInputStream bf = new BufferedInputStream(f);
		//3.调用BufferedInputSteram的read方法,进行文件的读取
		byte[] bytes = new byte[100];//定义存储数据
		while(f.read(bytes)!=-1){//和InputStream一样,读取文件末尾为-1
			System.out.print(new String(bytes,0,3));//bca
		}
		// 4.释放资源
		bf.close();
	}

}

四、字符缓冲输出流BufferedWriter

构造方法:
 BufferedWriter(Writer out)创建使用默认大小的输出缓冲区的缓冲字符输出流。
   Writer out;字符输出流对象。
 BufferedWriter(Writer out, int size)创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。
  Writer out;字符输出流对象。
  int size:指定字节缓冲区大小,不指定使用默认值。

特有操作方法:
  void newLine()写一行行分隔符,会根据不同的操作系统获取不同的行分隔符。
其它常用操作方法继承自父类Writer:
 void write(int c) 写入单个字符
 void write(char[] ch)写入字符数组
 void write(String str)写一个字符串
 void write(String str, int off, int len)写一个字符串的一部分
 abstract void write(char[] ch, int off, int len)写一个字符数组的一部分。
 void flush()刷新该流的缓冲
 void close():关闭此流,但要先刷新

使用步骤:
 1.创建一个FileWriter流对象,构造方法中指定数据输出路径。
 2.创建一个BufferedWriter对象,构造方法中传递Writer流对象,根据需要指定缓冲区大小,可以不指定大小,使用默认值。
 3.调用BufferedWriter对象中的write方法,进行数据写入到内存缓冲区。
 4.使用BufferedWriter中的方法flush,将内存缓冲区中的数据刷新到文件中。
 5.释放资源。

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class IoDemo11 {
         public static void main(String[] args) throws IOException {
			//1.创建一个FileWriter流对象,构造方法中指定数据输出路径
        	 FileWriter f = new FileWriter("D:\\eclipse\\eclipse\\example\\study\\io\\1.txt");
        	// 2.创建一个BufferedWriter对象,构造方法中传递Writer流对象,根据需要指定缓冲区大小,可以不指定大小,使用默认值
        	 BufferedWriter bw = new BufferedWriter(f);
            // 3.调用BufferedWriter对象中的write方法,进行数据写入到内存缓冲区
        	// void write(int c) 写入单个字符
        	 bw.write(99);//c
        	// void write(char[] ch)写入字符数组
        	 char[] ch={'a','b','c'};
        	 bw.write(ch);//abc
        	 
        	 //void newLine()写一行行分隔符,会根据不同的操作系统获取不同的行分隔符
        	 bw.newLine();
        	 //void write(String str)写一个字符串
        	 bw.write("哈哈");//哈哈
        	// void write(String str, int off, int len)写一个字符串的一部分
        	 String str = "hello";
        	 bw.write(str,0,3);//hel
        	 
        	// 4.使用BufferedWriter中的方法flush,将内存缓冲区中的数据刷新到文件中
        	 bw.flush();
            //5.释放资源
        	 bw.close();
		}
}

五、字符缓冲输入流BufferedReader

构造方法:
 BufferedReader(Reader in)创建使用默认大小的输入缓冲区的缓冲字符输入流。
 BufferedReader(Reader in, int size)创建使用指定大小的输入缓冲区的缓冲字符输入流。

特有操作方法:
 String readLine()读一行文字(读一行文字。 一行被视为由换行符(’\ n’),回车符(’\ r’)中的任何一个或随后的换行符终止)。
 返回值:包含行的内容的字符串,不包括任何行终止字符,如果已达到流的末尾,则为null。

常用操作其它方法继承自父类Reader:
  int read():读取单个字符并返回。
  int read(char[] ch):一次读取多个字符,将字符存入数组。
 void close():关闭流并释放资源。

使用步骤:
  1.创建一个FileReader流对象,构造方法中传递读取的文件路径。
  2.创建BuffedReader对象,构造方法中传递FileReader流对象,并可以指定缓冲区大小,也可不指定,使用默认大小。
  3.调用BufferedReader中的read/readLine方法,进行文本读取。
  4.释放资源。

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class IoDemo12 {
	public static void main(String[] args) throws IOException {
		// 1.创建一个FileReader流对象,构造方法中传递读取的文件路径
		FileReader f = new FileReader("D:\\eclipse\\eclipse\\example\\study\\io\\1.txt");
		//2.创建BuffedReader对象,构造方法中传递FileReader流对象,并可以指定缓冲区大小,也可不指定,使用默认大小
		BufferedReader br = new BufferedReader(f);
		//3.调用BufferedReader中的read/readLine方法,进行文本读取
		int a = br.read();
		String str = br.readLine();
		System.out.println((char)a);//输出结果:c
		System.out.println(str);//输出结果:abc
		
		// 4.释放资源
		br.close();
	}
	

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值