1.缓冲流的介绍
缓冲流也称为高效流,对普通流的性能方面增强(方法上基本和普通流是一模一样的)
##### 2.缓冲流的分类
字节输出流: OutputStream —> BufferedOutputStream 缓冲字节输出流
字节输入流: InputStream —> BufferedInputStream 缓冲字节输入流
字符输出流: Writer —> BufferedWriter 缓冲字符输出流
字符输入流: Reader —> BufferedReader 缓冲字符输入流
3.字节缓冲流的介绍和使用
- 字节缓冲流的构造
public BufferedOutputStream(OutputStream out);//创建缓冲流需要传入普通流
public BufferedInputStream(InputStream in);//创建缓冲流需要传入普通流
- 字符缓冲流的高效测试
public class BufferedStreamDemo {
public static void main(String[] args) throws Exception {
long start = System.currentTimeMillis();
copy03();
long end = System.currentTimeMillis();
System.out.println(end - start);
}
/**
* 复制文件:使用缓冲流 39毫秒
*/
public static void copy03() throws Exception {
//1.创建两个流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("G:\\upload\\666.png"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.png"));
//2.复制代码(一个一个字节数组复制)
byte[] bs = new byte[1024 * 128];
int len = 0;
while ((len = bis.read(bs)) != -1) {
bos.write(bs,0,len);
}
//3.释放资源
bos.close();
bis.close();
}
/**
* 复制文件:使用缓冲流 1312毫秒
*/
public static void copy02() throws Exception {
//1.创建两个流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("G:\\upload\\666.png"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.png"));
//2.复制代码(一个一个字节慢慢复制)
int b = 0;
while ((b = bis.read()) != -1) {
bos.write(b);
}
//3.释放资源
bos.close();
bis.close();
}
/**
* 复制文件:使用普通流 222882毫秒
*/
public static void copy01() throws Exception {
//1.创建两个流
FileInputStream fis = new FileInputStream("G:\\upload\\666.png");
FileOutputStream fos = new FileOutputStream("copy.png");
//2.复制(一个一个字节慢慢复制)
int b = 0;
while ((b = fis.read()) != -1) {
fos.write(b);
}
//3.释放资源
fos.close();
fis.close();
}
}
4.字符缓冲流的介绍和使用
- a.字符缓冲流的构造
public BufferedWriter(Writer w);//创建字符的缓冲流需要传入普通的字符流
public BufferedReader(Reader r);//创建字符的缓冲流需要传入普通的字符流
- b.字符缓冲流的2个特有方法
BufferedWriter 相比于 FileWriter 有一个特有方法:
public void newLine();//写入一个换行符
public class BufferedWriterDemo {
public static void main(String[] args) throws IOException {
//1.创建一个字符缓冲流
FileWriter fw = new FileWriter("1.txt");
BufferedWriter bw = new BufferedWriter(fw);
//2.研究bw的特有方法,newLine
for (int i = 0; i < 10; i++) {
bw.write("java");
//使用newLine,写入一个跨平台的换行符
bw.newLine();
}
//3.释放资源
bw.close();
fw.close();
}
}
BufferedReader 相比于 FileReader 有一个特有方法:
public String readLine();
public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
//1.创建一个字符缓冲流
FileReader fr = new FileReader("2.txt");
BufferedReader br = new BufferedReader(fr);
//2.读取数据
//String line = br.readLine();
//System.out.println(line);
//=========一次读取一行的标准循环代码=========
String line = "";
while ((line = br.readLine()) != null) {
System.out.println(line);
}
//3.释放资源
br.close();
fr.close();
}
}
5.综合练习:文本排序
需求:
1.将文件中文本一行一行的读取出来
2.要求对每一行文本按照序号排序
3.将每一行写入到另外一个文件中,一行文本后面需要换行
public class BufferedTestDemo {
public static void main(String[] args) throws Exception {
// 需求:
ArrayList<String> arr = new ArrayList<String>();
// 1.将文件中文本一行一行的读取出来
BufferedReader br = new BufferedReader(new FileReader("csb.txt"));
String line = "";
while ((line = br.readLine()) != null) {
arr.add(line);
}
br.close();
// 2.要求对每一行文本按照序号排序
Collections.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//按照首字母升序
return o1.charAt(0) - o2.charAt(0);
}
});
// 3.将每一行写入到另外一个文件中,一行文本后面需要换行
BufferedWriter bw = new BufferedWriter(new FileWriter("newcsb.txt"));
for (String s : arr) {
bw.write(s);
bw.newLine();//换行
}
bw.close();
}
}
本文深入探讨了缓冲流的概念、分类及其在字节流和字符流中的应用,通过实例对比了缓冲流与普通流在文件复制任务上的性能差异,展示了缓冲流如何显著提升I/O操作效率,并提供了文本排序的综合案例。
1026

被折叠的 条评论
为什么被折叠?



