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
来源:oschina
链接:https://my.oschina.net/u/4314216/blog/4294234