Java IO之缓冲流概述-3
程序员文章站
2024-03-04 15:23:05
...
缓冲流
缓冲流也叫高级流,是对4个基本的FileXXX流的增强,所以也是4个流,按照数据类型分类:
能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流
- 字节缓冲流:BufferedInputStream , BufferedOutputStream
- 字符缓冲流:BufferedReader,BufferedWriter
字节缓冲输入流 【BufferedInputStream】
!!!上代码!!!
public class Demo01BufferedInputStreram {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:\\cccc.txt"));
byte[] bytes = new byte[1024];
int len = 0;
while ((len = bis.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len));
}
bis.close();
}
}
!!!结果!!! 跟FileInputStream提供的功能是一样的高效读取文件内容
字节缓冲输出流 【BufferedOutputStream】
!!!上代码!!!
public class Demo02BufferedOutputStream {
public static void main(String[] args) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("F:\\dddd.txt", true));
String content = "!!!!Hello World!!!" + "\r\n";
for (int i = 0; i < 10; i++) {
bos.write(content.getBytes());
}
System.out.println("文件输出成功");
bos.close();
}
}
**!!!结果!!!**跟FileIOnputStream提供的功能是一样的高效读取文件内容
Demo CopyFile复制文件
!!!上代码,复制文件!!! 不要在意是什么文件。。。。
public class Demo03CopyFIle {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\Media\\MO8EPSG_1.rmvb"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("F:\\MO8EPSG_1.rmvb"));
long start = System.currentTimeMillis();
byte[] bytes = new byte[10245];
int len = 0;
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
bis.close();
bos.close();
long end = System.currentTimeMillis();
System.out.println("本次复制文件用了:" + (end - start) + "毫秒");
}
}
**!!!结果!!!**复制1个G的文件,仅仅用了1秒
字符缓冲输入流 【BufferedReader】
从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。
可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。
!!!上代码!!!
public class BufferedReaderAndBufferedWriter {![在这里插入图片描述](https://img-blog.csdnimg.cn/20200217205959345.png)
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("F:\\cccc.txt"));
char[] chars = new char[1024];
int len = 0;
while ((len = br.read(chars)) != -1) {
System.out.println(new String(chars, 0, len));
}
}
}
!!!结果!!!
注意:
将缓冲指定文件的输入。 没有缓冲,每次调用read()或readLine()可能会导致从文件中读取字节,转换成字符,然后返回,这可能非常低效
使用DataInputStreams进行文本输入的程序可以通过用适当的BufferedReader替换每个DataInputStream进行本地化
字符缓冲输出流 【BufferedWriter】
将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。
可以指定缓冲区大小,或者可以接受默认大小。 默认值足够大,可用于大多数用途。
!!!上代码!!!
public class Demo02BufferedWriter {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\ffff.txt", true));
String content = "Hello World" + "\r\n";
for (int i = 0; i < 10; i++) {
bw.write(content);
}
bw.close();
}
}
!!!结果!!!
注意:
将缓冲PrintWriter的输出到文件。 没有缓冲,每次调用print()方法都会使字符转换为字节,然后立即写入文件,这可能非常低效
上一篇: 数组及其内存分析,多维数组的本质