缓冲流专属
文章目录
- 缓冲流专属
- BufferedReader流
- 代码示例
- 代码示例【字节流转字符流】
- BufferedWriter流
- 代码示例
在进行读取文件数据的操作时,读取数据量大的文件时,读取的速度会很慢,Java中提供了一套缓冲流,可以提高IO流的读写速度
BufferedReader流
代码示例
public class BufferedReaderTest {
public static void main(String[] args) {
/*
当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流
外部负责包装的这个流,叫做:包装流,还有一个名字叫做:处理流
像当前这个程序来说:FileReader就是一个节点流 ;BufferedReader就是包装流、处理流
*/
FileReader reader = null;
BufferedReader buffer = null ;
try {
reader = new FileReader("E:/Typora笔记/JavaSE/IO流/语录2.0.txt");
buffer = new BufferedReader(reader);
//读一行
// String lines1 = buffer.readLine();
// System.out.println(lines1);
//读一个文本
//buffer.readLine() 方法读一个文本行,但不带换行符
String s = null ;
while ((s = buffer.readLine()) != null) {
System.out.print(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (buffer==null) {
try {
//关闭流
//对于包装流来说,只需要关闭最外层流就行,里面的节点流会自动关闭(可以查看源代码)
buffer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
- 当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流
- 外部负责包装的这个流,叫做:包装流,还有一个名字叫做:处理流
- 像当前这个程序来说:FileReader就是一个节点流 ;BufferedReader就是包装流、处理流
- 对于包装流来说,只需要关闭最外层流就行,里面的节点流会自动关闭(可以查看源代码)
代码示例【字节流转字符流】
public class BufferedReaderTest02 {
public static void main(String[] args) {
FileInputStream fileInputStream = null ;
BufferedReader buffer = null ;
//字节流
try {
fileInputStream = new FileInputStream("E:/Typora笔记/JavaSE/IO流/语录2.0.txt");
//通过转换流转换【InputStreamReader:将字节流转换成字符流】
//fileInputStream:节点流 reader:包装流
InputStreamReader reader = new InputStreamReader(fileInputStream);
//这个构造方法只能传一个字符流,不能传字节流
//reader:节点流 buffer:包装流
buffer = new BufferedReader(reader);
BufferedReader buffer1 = new BufferedReader(new InputStreamReader(new FileInputStream("E:/Typora笔记/JavaSE/IO流/语录2.0.txt")));
String line = null ;
while ((line = buffer.readLine()) != null) {
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
//关闭最外层
buffer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
补充【合并字节流、转换流、字符流】:
public class BufferedReaderTest02 {
public static void main(String[] args) {
BufferedReader buffer1 = null ;
try {
buffer1 = new BufferedReader(new InputStreamReader(new FileInputStream("E:/Typora笔记/JavaSE/IO流/语录2.0.txt")));
String line = null ;
while ((line = buffer1.readLine()) != null) {
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
//关闭最外层
buffer1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果:
我行过许多地方的桥,看过许多次数的云,
喝过许多种类的酒,却只爱过一个正当最好年龄的人
BufferedWriter流
代码示例
- BufferedWriter : 带有缓冲的字符输出流
- OutputStreamWriter :转换流
public class BufferedWriterTest01 {
public static void main(String[] args) {
BufferedWriter writer = null ;
try {
//带有缓冲区的字符输出流
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:/Typora笔记/JavaSE/IO流/语录2.0.txt",true)));
writer.write("\n");
writer.write("------沈从文");
writer.write("《湘行散记》");
writer.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (writer!=null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}