5.檔案位元組流-通過緩衝區來提高讀寫效率
阿新 • • 發佈:2022-04-10
通過建立位元組陣列作為緩衝區,提高讀寫效率,這邊固定了1024位元組
舉個例子:有2048斤大米。如果沒有定義緩衝區,就像是一粒一粒的搬回家,建立了快取區,1024位元組,就類似你有個口袋,這個口袋可以裝1024斤大米,這樣你搬2次,就可以全部搬完
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Dome03 {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
//建立位元組流輸入物件
fis = new FileInputStream("d:/zm.png");
//建立位元組流輸出物件
fos = new FileOutputStream("d:/dome.png");
//建立緩衝區
byte [] buff = new byte[1024];
int temp = 0;
while ((temp = fis.read(buff)) != -1) {//讀取到緩衝區
//從緩衝區讀取
fos.write(buff,0,temp);//這一步只是把檔案位元組流寫到了記憶體中
}
fos.flush();//這一步才是把檔案位元組流寫到磁碟中
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
if (fos != null) {
fos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
2.通過緩衝區提高讀取效率-方式二
通過建立位元組陣列作為緩衝區,提高讀寫效率,這邊使用了檔案大小作為緩衝區大小,但是如果檔案過大,那對記憶體的佔用也是很大的,所以檔案過大時,不建議使用此方式
舉個例子:相比較於方式一,有的人力氣大,一下子可以扛2048斤大米,這樣一次就可以全部搬回家了
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Dome03 {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
//建立位元組流輸入物件
fis = new FileInputStream("d:/zm.png");
//建立位元組流輸出物件
fos = new FileOutputStream("d:/dome.png");
//建立緩衝區
byte[] buff = new byte[fis.available()];//通過計算檔案大小來決定緩衝區的大小
fis.read(buff);//讀取檔案到緩衝區
fos.write(buff);//從緩衝區讀取檔案~這一步只是把檔案位元組流寫到記憶體中
fos.flush();//這一步才是把檔案位元組流寫到磁碟中
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
if (fos != null) {
fos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}