日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中的包装流和缓冲流概述

發布時間:2024/8/23 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中的包装流和缓冲流概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

處理流/包裝流(相對于節點流更高級)裝飾設計模式/包裝模式:

1:隱藏了底層的節點流的差異,并對外提供了更方便的輸入/輸出功能,讓我們只關心高級流的操作.
2:使用處理流包裝了節點流,程序直接操作處理流,讓節點流與底層的設備做IO操作.
3:只需要關閉處理流即可.
包裝流如何區分:寫代碼的時候,發現創建對象對象的時候,需要傳遞另一個流對象.
new 包裝流( 流對象 ) ;

什么是緩沖流:

是一個包裝流,目的起緩沖作用.BufferedInputStream:BufferedOutputStream:BufferedReader:BufferedWriter:

緩沖流的目的:

操作流的時候,習慣定義一個byte/char數組.
int read():每次都從磁盤文件中讀取一個字節. 直接操作磁盤文件性能極低.
解決方案: 定義一個數組作為緩沖區.
byte[] buffer = new byte[1024]; 該數組其實就是一個緩沖區.
一次性從磁盤文件中讀取1024個字節. 如此以來,操作磁盤文件的次數少了,—->性能得以提升.
既然我們都能想到,SUN公司早就想到了,提供的默認緩存區大小是8192(1024*8),我們一般不用修改大小.

代碼:

字節緩沖流案例:

package IO;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream;public class BufferStreamDemo {public static void main(String[] args) throws Exception {File file = new File("file/aaa.txt");BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));out.write("中國".getBytes());out.close();BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));byte[] buffer = new byte[1024];int len = -1;while((len = in.read(buffer)) != -1){System.out.println(new String(buffer, 0, len));}in.close();} }

字符緩沖流案例:

package IO;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter;public class BufferCharacterDemo {public static void main(String[] args) throws Exception {File file = new File("file/aaa.txt");BufferedWriter in = new BufferedWriter(new FileWriter(file,true));in.newLine();//用來換行等同于‘\n’in.write("美國");in.newLine();in.write("馬來西亞");in.close();BufferedReader out = new BufferedReader(new FileReader(file));String line = null;//按行讀取while((line = out.readLine()) != null){System.out.println(line);}out.close();} }

節點流和緩沖流性能對比:

操作字節和字符流都習慣使用緩沖流給包裝起來,提供IO性能/效率.

package IO;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream;public class NodeStreamVSBufferStream {public static void main(String[] args) throws Exception {//File file = new File("file/0001.酷六網-余光中《寫給未來的你》(曹可揚朗誦)[流暢版].flv");File file = new File("file/aaa.txt");File copyFile = new File("file/bbb.txt");printContent(file);//File copyFile = new File("file/《寫給未來的你》.flv");test1(file,copyFile);test2(file,copyFile);test3(file,copyFile);test4(file,copyFile);}private static void printContent(File file) throws Exception {BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));byte[] b = new byte[1024];int len = -1;while((len = in.read(b)) != -1){System.out.println(new String(b));}}private static void test4(File file, File copyFile) throws Exception {//測試包裝流 ,1024個字節拷貝System.out.println("------------測試包裝流 ,1024個字節拷貝---------------");long start = System.currentTimeMillis();BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(copyFile));int len = -1;byte[] b = new byte[1024];while((len = in.read(b))!= -1){out.write(b);}in.close();out.close();System.out.println(System.currentTimeMillis() - start);}private static void test3(File file, File copyFile) throws Exception{//測試包裝流 ,單個個字節拷貝System.out.println("------------測試包裝流 ,單個個字節拷貝---------------");long start = System.currentTimeMillis();BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(copyFile));int len = -1;while((len = in.read())!= -1){out.write(len);}in.close();out.close();System.out.println(System.currentTimeMillis() - start);}private static void test2(File file, File copyFile) throws Exception {//測試字節流 ,存1024個字節拷貝System.out.println("------------測試字節流 ,存1024個字節拷貝---------------");long start = System.currentTimeMillis();InputStream in = new FileInputStream(file);OutputStream out = new FileOutputStream(copyFile);int len = -1;byte[] b = new byte[1024];while((len = in.read(b))!= -1){out.write(b);}in.close();out.close();System.out.println(System.currentTimeMillis() - start);}private static void test1(File file, File copyFile) throws Exception {//測試一個字節一個字節拷貝System.out.println("-----------測試一個字節一個字節拷貝----------------");long start = System.currentTimeMillis();InputStream in = new FileInputStream(file);OutputStream out = new FileOutputStream(copyFile);int len = -1;while((len = in.read())!= -1){out.write(len);}in.close();out.close();System.out.println(System.currentTimeMillis() - start);} } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java中的包装流和缓冲流概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。