原理:Buffered的原理和之前数组增加复制图片速度的原理一致点击查看
一、bufferedInputStream,bufferedOutputStream,
1.总结
- 一、原理,读取单个字节太慢,5000毫秒
- 我们用一个数组来代替很快 0毫秒就可以,Buffer就是一个默认长度的数组.
- 二、BufferInputStream extends InputStream.继承所有方法使用方法一致
- 三、构造
- new BufferInputStream(InputStream inputStream,int size)
- size 不写就是默认
- 四、步骤
- 1.new 读in和写Out的流
- 2.new 读写的缓冲流
- 3.再加字节数组双倍快乐
- 4.如果不是-1读in出来,复制out出来.
2.code
package Java学习.Java高级.IO.Buffer4大顶级IO类的缓冲类.BufferInputStream和BufferOutputStream;
import java.io.*;
/**
* 一、原理,读取单个字节太慢,5000毫秒
* 我们用一个数组来代替很快 0毫秒就可以,Buffer就是一个默认长度的数组.
* 二、BufferInputStream extends InputStream.继承所有方法使用方法一致
* 三、构造
* new BufferInputStream(InputStream inputStream,int size)
* size 不写就是默认
* 四、步骤
* 1.new 读in和写Out的流
* 2.new 读写的缓冲流
* 3.再加字节数组双倍快乐
* 4.如果不是-1读in出来,复制out出来.
*/
public class Main {
public static void main(String[] args) throws IOException {
String url = "D:\\Program Files\\JetBrains\\test1\\Lab\\src\\Java学习\\Java高级\\IO\\Buffer" +
"4大顶级IO类的缓冲类\\BufferInputStream和BufferOutputStream\\";
//1,
FileInputStream fileInputStream = new FileInputStream(url + "img.png");
FileOutputStream fileOutputStream = new FileOutputStream(url + "使用Buffer缓冲复制很快.png");
//2.
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
//3.
byte[] bytes = new byte[1024*100];
//4.
long startTime = System.currentTimeMillis();
while (bufferedInputStream.read(bytes,0,bytes.length)!= -1){//如果还有数据
bufferedOutputStream.write(bytes,0,bytes.length);
}
bufferedOutputStream.flush();//刷新
bufferedOutputStream.close();//关闭写,其实Buffer可以在关闭时候自动刷新了。
bufferedInputStream.close();//关闭读
System.out.println("复制800KB用时:"+(System.currentTimeMillis()-startTime)+" 毫秒");
System.out.println("多次测试得知缓冲默认size或者数组[1024]越大,复制越快");
}
}
Run:
复制800KB用时:1 毫秒
多次测试得知缓冲默认size或者数组[1024]越大,复制越快
Process finished with exit code 0
二、,BufferedReader,BufferWriter字符
package Java学习.Java高级.IO.Buffer4大顶级IO类的缓冲类.BufferReader和BufferWriter;
import java.io.*;
/**
* @BufferWriter有一个新的方法newLine换行
* 类似BufferInputStream 详情看之前BufferInputStream的代码
* * 一、步骤
* 1.new FileWriter 写
* 2.new Buffer 写
* 3.用 buffer的write("faff")写入文件
* 4.刷新
* 5.关闭
* 二、读取
* 1.new Reader
* 2.new Buffer读取
* 3.如果读取不为空,循环连续读取
* 4.关闭
*/
public class Main {
public static void main(String[] args) throws IOException {
String url = "D:\\Program Files\\JetBrains\\test1\\Lab\\src\\Java学习\\Java高级\\IO\\Buffer4大顶" +
"级IO类的缓冲类\\BufferReader和BufferWriter\\";
System.out.println("--------1.buffer写-----------------");
//1.
FileWriter fileWriter = new FileWriter(url + "嫌疑人.txt");
//2.
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
//3.
for (int i = 0; i < 10; i++) {
bufferedWriter.write("第"+i+"个字符串");
bufferedWriter.newLine();//新的newLine()方法换行
}
//4.刷新
bufferedWriter.flush();
//5.close()
bufferedWriter.close();
System.out.println("----------------2.Buffer读取---------");
//1
FileReader fileReader = new FileReader(url + "嫌疑人.txt");
//2.
BufferedReader bufferedReader = new BufferedReader(fileReader);
//3,输出
char[] chars = new char[1024];
while (bufferedReader.read(chars,0,chars.length)!=- 1){
System.out.println(chars);
}
//close
bufferedReader.close();
System.out.println("----------readLine()方法读一行-----------.");
fileReader = new FileReader(url + "嫌疑人.txt");//Buffer
BufferedReader bufferedReader1 = new BufferedReader(fileReader);
String line;
while ((line = bufferedReader1.readLine()) != null){
System.out.println(line);
}
}
}
Run:
--------1.buffer写-----------------
----------------2.Buffer读取---------
第0个字符串
第1个字符串
第2个字符串
第3个字符串
第4个字符串
第5个字符串
第6个字符串
第7个字符串
第8个字符串
第9个字符串
----------readLine()方法读一行-----------.
第0个字符串
第1个字符串
第2个字符串
第3个字符串
第4个字符串
第5个字符串
第6个字符串
第7个字符串
第8个字符串
第9个字符串
Process finished with exit code 0