字節流讀取數據兩種方式比較
█ 一次讀取一個字節
█ 一次讀取一個字節數組
☞每次可以讀取多個數據,提高了操作效率
|
public class CopyDemo {
//第一步:將1.txt中的內容讀入到內存 FileInputStream
//第二步:將內存中讀入的數據讀入到2.txt FileOutputStream
//使用字節流來copy東西不會出現亂碼,因為是把所有東西照搬過去,沒有拿出來解析
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("我的滑板鞋.mp4"); //任何文件格式都可以拷貝
FileOutputStream fos = new FileOutputStream("kaobei.mp4");
|
//方法一: 效率低下,一次一個字節
/* int b = 0;
while((b = fis.read()) != -1){
fos.write(b);
}*/
//方法二: 效率高,一次整個數組
byte[] bytes = new byte[1024];
int len = 0;
while((len = fis.read(bytes)) != -1){
fos.write(bytes,0,len);
}
fis.close();
fos.close();
}
}
|
字節緩沖流 ( 包裝流,加入了一些緩沖區 8092 byte )
█ 字節流一次讀寫一個數組的速度明顯比一次讀寫一個字節的速度快很多,這是加入了數組這樣的緩沖區效果,java本身在設計的時候,也考慮到了這樣的情況,所以提供了字節緩沖區流
█ 字節緩沖輸出流
☞BufferedOutputStream
BufferedInputStream(InputStream in); //緩沖區大小默認是8192
創建一個 BufferedInputStream 並保存其參數,即輸入流 in,以便將來使用。
BufferedInputStream(InputStream in, int size);
創建具有指定緩沖區大小的
█ 字節緩沖輸入流
☞BufferedInputStream
BufferedOutputStream(OutputStream out);
創建一個新的緩沖輸出流,以將數據寫入指定的底層輸出流。
BufferedOutputStream(OutputStream out, int size);
創建一個新的緩沖輸出流,以將具有指定緩沖區大小的數據寫入指定的底層輸出流。
|
public class BufferTestMain {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("我的滑板鞋.mp4");
// 這樣的fis不帶緩沖區
BufferedInputStream bfis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("kaobei.mp4");
BufferedOutputStream bfos = new BufferedOutputStream(fos);
|
// 方法一:
/* int b = 0;
while ((b = bfis.read()) != -1) {
//看上去是一個字節一個字節的讀,其實系統實現是一次讀 8192 個字節到緩沖區
bfos.write(b);
}*/
// 方法二:更快,緩沖區自帶一個8192緩沖區,自己還定義了一個1024的緩沖區
byte[] bytes = new byte[1024];
int len = 0;
while ((len = bfis.read(bytes)) != -1) {
bfos.write(bytes, 0, len);
}
}
}
|
