java复习第8天---8.4---IO流---缓冲流

99封情书 提交于 2020-10-23 20:37:50

java复习第8天---8.4---IO流---缓冲流


目录




内容

1、缓冲流

1.1、概述

  缓冲流,又名高效流。是对4个基本流的增强,也是4个。按照数据类型分类:

  • 字节缓冲流
    • BuffereddInputStream:字节输入缓冲流
    • BufferedOutputStream:字节输出缓冲流
  • 字符缓冲流
    • BufferedReader:字符输入缓冲流
    • BufferedWriter:字符输出缓冲流

1.2、原理

  缓冲流,在创建流对象的时候,会创建一个内置的默认大小的缓存区数组,通过缓冲区读写,减少IO次数,提高读写效率。

1.3、BufferedInputStream

  字节输入缓冲流:

  • 构造方法
参数列表 描述
InputStream in 创建一个新的字节输入缓冲流,从指定的底层字节输入流in读入数据
InputStream in, int buf 创建一个新的字节输入缓冲流,指定缓冲取大小buf,从指定的底层字节输入流in读入数据
  • 示例1.3-1:读取a.txt内容并显示

      package io.stream.buffered;
    
      import java.io.BufferedInputStream;
      import java.io.FileInputStream;
      import java.io.IOException;
    
      public class TestBufferedInputStream1 {
      	public static void main(String[] args) throws IOException {
      		String path = "f:\\test\\b.txt";
      		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
      		int len;
      		while((len = bis.read()) != -1) {
      			System.out.print((char)len);
      		}
    
      		bis.close();
      	}
      }
      测试结果:
      package io.inputstream.fileinputstream;
    
      import java.io.FileInputStream;
      import java.io.IOException;
    

1.4、BufferedOutputStream

  BufferedOutputStream字节输出缓冲流。

  • 构造方法
参数列表 描述
OutputStream out 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
OutputStream out, int size 创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。
  • 示例1.4-1:把"BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path));"这句话输入到b.txt中。

      package io.stream.buffered;
    
      import java.io.BufferedOutputStream;
      import java.io.FileOutputStream;
      import java.io.IOException;
    
      public class TestBufferedOutputStream1 {
      	public static void main(String[] args) throws IOException {
      		String path = "f:\\test\\b.txt";
      		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path));
    
      		bos.write("BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path));".getBytes());
      		bos.close();
      	}
      }
      测试结果:b.txt
      BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path));
    

1.5、BufferedReader

  BufferedReader 字符输入缓冲流。

  • 构造方法
参数列表 描述
Reader in 创建一个新的字符输入缓冲流,从指定的底层字节输入流in读入数据
Reader in, int buf 创建一个新的字符输入缓冲流,指定缓冲取大小buf,从指定的底层字节输入流in读入数据
  • 示例1.3-1:读取a.txt内容并显示

      package io.stream.buffered;
    
      import java.io.BufferedReader;
      import java.io.FileReader;
      import java.io.IOException;
    
      public class TestBufferedReader1 {
      	public static void main(String[] args) throws IOException {
      		String path = "f:\\test\\a.txt";
      		BufferedReader bis = new BufferedReader(new FileReader(path));
      		int len;
      		while((len = bis.read()) != -1) {
      			System.out.print((char)len);
      		}
    
      		bis.close();
      	}
      }
      测试结果:
      欢迎入坑JAVA!
      《JAVA从入门到放弃》
      Java
      PHP
      C++
    

1.6、BufferedWriter

  BufferedWriter 字符输出缓冲流。

  • 构造方法
参数列表 描述
Writer out 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
Writer out, int size 创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。
  • 示例1.4-1:把"创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流;"这句话输入到b.txt中。

      package io.stream.buffered;
    
      import java.io.BufferedWriter;
      import java.io.FileWriter;
      import java.io.IOException;
    
      public class TestBufferedWriter1 {
      	public static void main(String[] args) throws IOException {
      		String path = "f:\\test\\b.txt";
      		BufferedWriter bos = new BufferedWriter(new FileWriter(path));
    
      		bos.write("创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流;".toCharArray());
      		bos.close();
      	}
      }
      测试结果:b.txt
      创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流;
    

1.8、新方法

  • BufferedReader 中 readLine 读取一行
  • BufferedWriter 中 newLine 写入回车换行

1.7、小案例

  • 需求:文本排序

  • 文本内容示例:
    3.侍中、侍郎郭攸之、费 、董允等,此皆良实,志虑忠存,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必得裨补阙漏,有所广益。
    8.愿陛下托臣以讨贼兴复之效,不效,则制治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、 、允等之慢,以彰其咎;陛下亦宜自谋,以咨 取善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。
    4.将军向宠,性行淑均,晓畅军事,试用之于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
    2.宫中府中,俱为一体, 罚 否,不宜异同。若有作奸犯科以及忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。
    1.先帝创业未半而中业崩殂,令天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,




  • 代码1.7-1:

package io.stream.buffered;

	import java.io.BufferedReader;
	import java.io.BufferedWriter;
	import java.io.FileReader;
	import java.io.FileWriter;
	import java.io.IOException;
	import java.util.Map;
	import java.util.Map.Entry;
	import java.util.Set;
	import java.util.TreeMap;

	public class TestTxtSort {
		public static void main(String[] args) throws IOException {
			BufferedReader br = new BufferedReader(new FileReader("f:\\test\\b.txt"));
			String str;
			Map<String, String> txt = new TreeMap<>();
			while((str = br.readLine()) != null) {
				txt.put(str.substring(0, 1), str.substring(1));
			}
			br.close();

			BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test\\d.txt"));
			Set<Entry<String, String>> entry = txt.entrySet();
			for(Entry<String, String> x: entry) {
				bw.write(x.getKey() + x.getValue());
				bw.newLine();
			}
			bw.close();

		}
	}
	测试结果:d.txt
	1.先帝创业未半而中业崩殂,令天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,
2.宫中府中,俱为一体, 罚 否,不宜异同。若有作奸犯科以及忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。
3.侍中、侍郎郭攸之、费 、董允等,此皆良实,志虑忠存,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必得裨补阙漏,有所广益。
4.将军向宠,性行淑均,晓畅军事,试用之于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
8.愿陛下托臣以讨贼兴复之效,不效,则制治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、 、允等之慢,以彰其咎;陛下亦宜自谋,以咨 取善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。

tips:至于排序后要不要加序号,看需要。

后记

本项目为参考某马视频开发,相关视频及配套资料可自行度娘或者联系本人。上面为自己编写的开发文档,持续更新。欢迎交流,本人QQ:806797785

前端项目源代码地址:https://gitee.com/gaogzhen/vue-leyou
    后端JAVA源代码地址:https://gitee.com/gaogzhen/JAVA



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!