IO缓存流
2019-04-19 本文已影响0人
test_dw
为啥要缓存流?
- 答:当需要将数据写入磁盘时,在每一次读写都会访问硬盘,这样就会导致频繁的IO操作,降低了程序的性能,而缓存流就是为了解决这一问题而出生的。
什么是缓存流?
- da:就是将需要读入或者写入的数据,一次性的读/写较多到缓存流之中,之后的操作就可以从缓存流中进行数据的读取/写入,从而减少了IO操作。就像吃饭一样,先把饭盛到饭碗,就不用每一口都要到电饭煲里取。
字节流与缓存流
- 字节流是每对一个字节进行操作都要进行一次io,而缓存流在写入数据的时候,会先把数据写入到缓存区,直到缓存区达到一定的量,才把这些数据,一起写入到硬盘中去。
使用BufferedReader缓存流读取数据
- 缓存字符流BufferedReader可以一次性读取一行数据。
package twodoge;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public static void main(String args[]){
File f = new File('D:twodoge.txt');
//创建文字字符流
//缓存流必须建立在一个基础流上
try(
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
)
{
while(True){
String line = br.readLine();
if(line == null)
break;
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
使用PringWriter缓存流写出数据
- PrintWriter 缓存字符输出流, 可以一次写出一行数据
package twodoge;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
public class myPrintWriter {
public static viod main(String args[]) {
File f = new File("D://twodoge.txt");
try (
FileWriter fw = new FileWriter(f);
PrintWriter pw = new PrintWriter(fw);
)
{
pw.printWriter("test1");
pw.printWriter("test2");
} catch (IOException e) {
e.printStackTrace();
}
}
}
flush
- 有时候需要需要立即把数据写入到磁盘中,这时候就要用flush。
package twodoge;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
public class myPrintWriter {
public static viod main(String args[]) {
File f = new File("D://twodoge.txt");
try (
FileWriter fw = new FileWriter(f);
PrintWriter pw = new PrintWriter(fw);
)
{
pw.println("test1");
fw.flush();
pw.println("test2");
fw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}