java中的缓冲流BufferedWriter和BufferedReader
java中的缓冲流有BufferedWriter和BufferedReader
在java api 手册中这样说缓冲流:
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。 通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)例如:
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
从中可以看出
1.高效读取 字符、数组和行
2.缓冲区可以自己指定大小,默认为 8192 字节
3.缓冲流实际上是一个包装流,底层是字符流或者字节流
4.建议使用BufferedReader代替Reader
我们可以这样理解缓冲
这是一个完整的文件读取和写入操作,左边的浅蓝色框代表源文件,中间的是我们的java程序,右边的是目标文件。
缓冲流贯穿源、程序和目标文件。左侧表示读入文件,即文件的读操作。右侧是文件的写操作。
文件的读过程中有一个很重要的方法 readLine()
文件的读过程:
1.首先是将源文件读取到橙色的内存缓冲区,缓冲区默认大小是8192字节。
2.读取达到阈值 8192 字节或遇到 '\n' 或者 '\t' 表示读取结束。
3.将内存缓冲区的数据读取到程序中。
4.循环以上操作。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new FileReader("a.txt"));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
}
}
写操作中,先将结果写入内存缓冲区,达到阈值或遇到 ‘\t’ 或 ‘\n’ 后写入磁盘。 write() 方法直接可以写字符串,还有一个newLine(),另起一行,可以理解为 System.out.print("\n") 的进化版。
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterDemo {
public static void main(String[] args) throws IOException {
BufferedWriter out=new BufferedWriter(new FileWriter("b.txt"));
out.write("问君能有几多愁?");
out.newLine();
out.write("恰似一江春水向东流。");
out.close();
}
}
上一篇: 单机版坦克大战游戏总结
下一篇: Java编程中应用的GUI设计基础
推荐阅读
-
java中的缓冲流BufferedWriter和BufferedReader
-
图文精讲(一)——Java中I/O流——字节流(概述、读写文件、文件的拷贝、缓冲区、缓冲流)
-
java基础回顾之 流(BufferedReader/BufferedWriter )字符缓冲流, 默认有8192个字符的缓冲区
-
Java中的I/O输入输出流,缓冲流
-
Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
-
Java中IO流文件读取、写入和复制的实例
-
Python3: 内存中的 IO 流缓冲区 - StringIO 和 BytesIO
-
缓冲字符流 java.io.BufferedWriter ,java.io.BufferedReader,缓冲字符输出流:PrintWriter
-
java——序列化的反序列化 和 IO 流 和 单例模式下将信息存储到properties文件中
-
JAVA-----IO篇四(缓冲流BufferedWriter以及BufferedReader、转换流outputStreamWriter以及inputStreamWriter)