原理: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