字節(jié)輸出流緩沖流BufferedOutputStream字節(jié)輸入流緩沖流BufferedInputStream

08字節(jié)輸出流緩沖流BufferedOutputStream

* A: 字節(jié)輸出流緩沖流BufferedOutputStream
    * a: BufferedOutputStream
        * 字節(jié)輸出流的緩沖流
        * java.io.BufferedOuputStream 作用: 提高原有輸出流的寫入效率
        * BufferedOuputStream 繼承 OutputStream
        * 方法,寫入 write 字節(jié),字節(jié)數(shù)組            
        * 構(gòu)造方法:
            * BufferedOuputStream(OuputStream out)
            * 可以傳遞任意的字節(jié)輸出流, 傳遞的是哪個(gè)字節(jié)流,就對(duì)哪個(gè)字節(jié)流提高效率  

    * b: 案例代碼
        public class BufferedOutputStreamDemo {
            public static void main(String[] args)throws IOException {
                //創(chuàng)建字節(jié)輸出流,綁定文件
                //FileOutputStream fos = new FileOutputStream("c:\\buffer.txt");
                //創(chuàng)建字節(jié)輸出流緩沖流的對(duì)象,構(gòu)造方法中,傳遞字節(jié)輸出流
                BufferedOutputStream bos = new
                        BufferedOutputStream(new FileOutputStream("c:\\buffer.txt"));
                
                bos.write(55);
                
                byte[] bytes = "HelloWorld".getBytes();
                
                bos.write(bytes);
                
                bos.write(bytes, 3, 2);
                
                bos.close();
            }
        }

09字節(jié)輸入流緩沖流BufferedInputStream

* A: 字節(jié)輸入流緩沖流BufferedInputStream
    * a: BufferedInputStream
        * 字節(jié)輸入流的緩沖流
        * 繼承InputStream,標(biāo)準(zhǔn)的字節(jié)輸入流
        * 讀取方法  read() 單個(gè)字節(jié),字節(jié)數(shù)組              
        * 構(gòu)造方法:
            * BufferedInputStream(InputStream in)
            * 可以傳遞任意的字節(jié)輸入流,傳遞是誰(shuí),就提高誰(shuí)的效率
            * 可以傳遞的字節(jié)輸入流 FileInputStream
    * b: 案例代碼
        public class BufferedInputStreamDemo {
            public static void main(String[] args) throws IOException{
                //創(chuàng)建字節(jié)輸入流的緩沖流對(duì)象,構(gòu)造方法中包裝字節(jié)輸入流,包裝文件
                BufferedInputStream bis = new 
                        BufferedInputStream(new FileInputStream("c:\\buffer.txt"));
                byte[] bytes = new byte[10];
                int len = 0 ;
                while((len = bis.read(bytes))!=-1){
                    System.out.print(new String(bytes,0,len));
                }
                bis.close();
            }
        }

10四種文件復(fù)制方式的效率比較

* A:四種文件復(fù)制方式的效率比較
    * a: 四中復(fù)制方式
        * 字節(jié)流讀寫單個(gè)字節(jié)                    125250 毫秒
        * 字節(jié)流讀寫字節(jié)數(shù)組                    193    毫秒  OK
        * 字節(jié)流緩沖區(qū)流讀寫單個(gè)字節(jié)         1210   毫秒
        * 字節(jié)流緩沖區(qū)流讀寫字節(jié)數(shù)組            73     毫秒  OK        
                
    * b: 案例代碼
    
        public class Copy {
            public static void main(String[] args)throws IOException {
                long s = System.currentTimeMillis();
                copy_4(new File("c:\\q.exe"), new File("d:\\q.exe"));
                long e = System.currentTimeMillis();
                System.out.println(e-s);
            }
            /*
             * 方法,實(shí)現(xiàn)文件復(fù)制
             *  4. 字節(jié)流緩沖區(qū)流讀寫字節(jié)數(shù)組
             */
            public static void copy_4(File src,File desc)throws IOException{
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desc));
                int len = 0 ;
                byte[] bytes = new byte[1024];
                while((len = bis.read(bytes))!=-1){
                    bos.write(bytes,0,len);
                }
                bos.close();
                bis.close();
            }
            /*
             * 方法,實(shí)現(xiàn)文件復(fù)制
             *  3. 字節(jié)流緩沖區(qū)流讀寫單個(gè)字節(jié)
             */
            public static void copy_3(File src,File desc)throws IOException{
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desc));
                int len = 0 ;
                while((len = bis.read())!=-1){
                    bos.write(len);
                }
                bos.close();
                bis.close();
            }
            
            /*
             * 方法,實(shí)現(xiàn)文件復(fù)制
             *  2. 字節(jié)流讀寫字節(jié)數(shù)組
             */
            public static void copy_2(File src,File desc)throws IOException{
                FileInputStream fis = new FileInputStream(src);
                FileOutputStream fos = new FileOutputStream(desc);
                int len = 0 ;
                byte[] bytes = new byte[1024];
                while((len = fis.read(bytes))!=-1){
                    fos.write(bytes,0,len);
                }
                fos.close();
                fis.close();
            }
            
            /*
             * 方法,實(shí)現(xiàn)文件復(fù)制
             *  1. 字節(jié)流讀寫單個(gè)字節(jié)
             */
            public static void copy_1(File src,File desc)throws IOException{
                FileInputStream fis = new FileInputStream(src);
                FileOutputStream fos = new FileOutputStream(desc);
                int len = 0 ;
                while((len = fis.read())!=-1){
                    fos.write(len);
                }
                fos.close();
                fis.close();
            }
        }

11字符輸出流緩沖流BufferedWriter

* A: 字符輸出流緩沖流BufferedWriter
    * a: BufferedWriter
        * 字符輸出流緩沖區(qū)流
        * java.io.BufferedWriter 繼承 Writer
        * 寫入方法 write () 單個(gè)字符,字符數(shù)組,字符串

        * 構(gòu)造方法:
            * BufferedWriter(Writer w)傳遞任意字符輸出流
            * 傳遞誰(shuí),就高效誰(shuí)
            * 能傳遞的字符輸出流 FileWriter, OutputStreamWriter
    * b: 案例代碼
        public class BufferedWrierDemo {
            public static void main(String[] args) throws IOException{
                //創(chuàng)建字符輸出流,封裝文件
                FileWriter fw = new FileWriter("c:\\buffer.txt");
                BufferedWriter bfw = new BufferedWriter(fw);
                
                bfw.write(100);
                bfw.flush();
                bfw.write("你好".toCharArray());
                bfw.flush();
                
                
                bfw.write("你好");
                
                bfw.flush();
                
                
                bfw.write("我好好");
                
                bfw.flush();

                bfw.write("大家都好");
                bfw.flush();
                
                bfw.close();
                
            }
        }

12字符輸出流緩沖流BufferedWriter特有方法newLine

* A: 字符輸出流緩沖流BufferedWriter特有方法newLine
    * a: 方法介紹
        * void  newLine() 寫換行
            
        * newLine()文本中換行, \r\n也是文本換行
        * 方法具有平臺(tái)無(wú)關(guān)性
        * Windows  \r\n
        * Linux    \n
             
        * newLine()運(yùn)行結(jié)果,和操作系統(tǒng)是相互關(guān)系
        * JVM: 安裝的是Windows版本,newLine()寫的就是\r\n
        * 安裝的是Linux版本,newLine()寫的就是\n
        /*
         *  將數(shù)據(jù)源 c:\\a.txt
         *  復(fù)制到 d:\\a.txt  數(shù)據(jù)目的
         *  字節(jié)輸入流,綁定數(shù)據(jù)源
         *  字節(jié)輸出流,綁定數(shù)據(jù)目的
         *  
         *  輸入,讀取1個(gè)字節(jié)
         *  輸出,寫1個(gè)字節(jié)
         */
    * b: 案例代碼
        public class BufferedWrierDemo {
            public static void main(String[] args) throws IOException{
                //創(chuàng)建字符輸出流,封裝文件
                FileWriter fw = new FileWriter("c:\\buffer.txt");
                BufferedWriter bfw = new BufferedWriter(fw);
                
                bfw.write(100);
                bfw.flush();
                bfw.write("你好".toCharArray());
                bfw.flush();
                
                bfw.write("你好");
                bfw.newLine();
                bfw.flush();
                
                
                bfw.write("我好好");
                bfw.newLine();
                bfw.flush();

                bfw.write("大家都好");
                bfw.flush();
                
                bfw.close();
                
            }
        }

13字符輸入流緩沖流BufferedReader

* A: 字符輸入流緩沖流BufferedReader
    * a: 概述
        * 從字符輸入流中讀取文本,緩沖各個(gè)字符,從而實(shí)現(xiàn)字符、數(shù)組和行的高效讀取
        * public String readLine() 讀取一個(gè)文本行,包含該行內(nèi)容的字符串,不包含任何行終止符,如果已到達(dá)流末尾,則返回 null

14字符輸入流緩沖流BufferedReader讀取文本行

* A: 字符輸入流緩沖流BufferedReader讀取文本行
    * a: BufferedReader
        * 字符輸入流緩沖流
        * java.io.BufferedReader 繼承 Reader
        * 讀取功能 read() 單個(gè)字符,字符數(shù)組
        * 構(gòu)造方法:
            * BufferedReader(Reader r)
            * 可以任意的字符輸入流
               FileReader  InputStreamReader       
        * BufferedReader自己的功能
            * String readLine() 讀取文本行 \r\n   
                * 方法讀取到流末尾,返回null
    * b: 小特點(diǎn)
         * 獲取內(nèi)容的方法一般都有返回值
         * int 沒(méi)有返回的都是負(fù)數(shù)
         * 引用類型 找不到返回null
         * boolean 找不到返回false
        
    * c: 案例代碼
        public class BufferedReaderDemo {
            public static void main(String[] args) throws IOException {
                int lineNumber = 0;
                //創(chuàng)建字符輸入流緩沖流對(duì)象,構(gòu)造方法傳遞字符輸入流,包裝數(shù)據(jù)源文件
                BufferedReader bfr = new BufferedReader(new FileReader("c:\\a.txt"));
                //調(diào)用緩沖流的方法 readLine()讀取文本行
                //循環(huán)讀取文本行, 結(jié)束條件 readLine()返回null
                String line = null;
                while((line = bfr.readLine())!=null){
                    lineNumber++;
                    System.out.println(lineNumber+"  "+line);
                }
                bfr.close();
            }
        }

        /*
         * String line = bfr.readLine();
                System.out.println(line);
                
                line = bfr.readLine();
                System.out.println(line);
                
                line = bfr.readLine();
                System.out.println(line);
                
                line = bfr.readLine();
                System.out.println(line);
                
                line = bfr.readLine();
                System.out.println(line);
         */

15字符流緩沖區(qū)流復(fù)制文本文件

* A: 字符流緩沖區(qū)流復(fù)制文本文件
    * a: 案例代碼
        /*
         *  使用緩沖區(qū)流對(duì)象,復(fù)制文本文件
         *  數(shù)據(jù)源  BufferedReader+FileReader 讀取
         *  數(shù)據(jù)目的 BufferedWriter+FileWriter 寫入
         *  讀取文本行, 讀一行,寫一行,寫換行
         */
        public class Copy_1 {
            public static void main(String[] args) throws IOException{
                BufferedReader bfr = new BufferedReader(new FileReader("c:\\w.log"));   
                BufferedWriter bfw = new BufferedWriter(new FileWriter("d:\\w.log"));
                //讀取文本行, 讀一行,寫一行,寫換行
                String line = null;
                while((line = bfr.readLine())!=null){
                    bfw.write(line);
                    bfw.newLine();
                    bfw.flush();
                }
                bfw.close();
                bfr.close();
            }
        }

16IO流對(duì)象的操作規(guī)律

* A: IO流對(duì)象的操作規(guī)律
    * a: 明確一:要操作的數(shù)據(jù)是數(shù)據(jù)源還是數(shù)據(jù)目的。
        * 源:InputStream    Reader
        * 目的:OutputStream Writer
        * 先根據(jù)需求明確要讀,還是要寫。

    * b: 明確二:要操作的數(shù)據(jù)是字節(jié)還是文本呢?
        * 源:
            * 字節(jié):InputStream
            * 文本:Reader
        * 目的:
            * 字節(jié):OutputStream
            * 文本:Writer
    * c: 明確三:明確數(shù)據(jù)所在的具體設(shè)備。
        * 源設(shè)備:
            * 硬盤:文件  File開(kāi)頭。
            * 內(nèi)存:數(shù)組,字符串。
            * 鍵盤:System.in;
            * 網(wǎng)絡(luò):Socket
        * 目的設(shè)備:
            * 硬盤:文件  File開(kāi)頭。
            * 內(nèi)存:數(shù)組,字符串。
            * 屏幕:System.out
            * 網(wǎng)絡(luò):Socket
            * 完全可以明確具體要使用哪個(gè)流對(duì)象。
    * d: 明確四:是否需要額外功能呢?
        * 額外功能:
            * 轉(zhuǎn)換嗎?轉(zhuǎn)換流。InputStreamReader OutputStreamWriter
            * 高效嗎?緩沖區(qū)對(duì)象。BufferedXXX
            * 已經(jīng)明確到了具體的體系上。

17總結(jié)

* 把今天的知識(shí)點(diǎn)總結(jié)一遍。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,491評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書人閱讀 176,263評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 62,946評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,708評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 55,186評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 42,409評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,939評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,774評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,976評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,209評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 34,641評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 35,872評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,650評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,958評(píng)論 2 373

推薦閱讀更多精彩內(nèi)容

  • # 3.1 File # ## 3.1.1 File基本概念 ## 1.基本概念 -File類用于表示文件(目錄)...
    閆子揚(yáng)閱讀 480評(píng)論 0 0
  • 1 IO(二)No19 【 緩沖流:內(nèi)置了緩沖區(qū),對(duì)現(xiàn)有的流對(duì)象進(jìn)行了封裝,實(shí)現(xiàn)了高效的讀寫操作并增強(qiáng)了功能 ...
    征程_Journey閱讀 721評(píng)論 0 1
  • 緩沖流是為了讀取和寫入的速度,提高效率主要包括:字節(jié)緩沖流和字符緩沖流 字節(jié)緩沖流: 根據(jù)流的方向,共有2個(gè):字節(jié)...
    Mango_yes閱讀 589評(píng)論 0 0
  • 1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一條不間斷的字節(jié)...
    JackChen1024閱讀 831評(píng)論 0 10
  • 親愛(ài)的***年級(jí)****班的各位家長(zhǎng): 新學(xué)年伊始,為便于今后班級(jí)各項(xiàng)活動(dòng)的順利開(kāi)展,家委會(huì)通過(guò)微信群與部分家長(zhǎng)進(jìn)...
    谷舒羽閱讀 34,059評(píng)論 0 1