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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

io系列之字节流

發(fā)布時(shí)間:2024/7/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 io系列之字节流 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  java中io流系統(tǒng)龐大,知識點(diǎn)眾多,作為小白通過五天的視頻書籍學(xué)習(xí)后,總結(jié)了io系列的隨筆,以便將來復(fù)習(xí)查看。

  本篇為此系列隨筆的第一篇:io系列之字節(jié)流。

?

一、字節(jié)流的File讀寫操作。

    InputStream and OutputStream

一)、 OutputStream: 字節(jié)輸出流。

   以一個(gè)操作文件的例子進(jìn)行說明: FileOutputStream (說明,該類對象必須指向一個(gè)文件,)


    構(gòu)造方法:
        FileOutputStream(File file) 創(chuàng)建一個(gè)向指定 File 對象表示的文件中寫入數(shù)據(jù)的文件輸出流.
        FileOutputStream(File file, boolean append) 創(chuàng)建一個(gè)向指定 File 對象表示的文件中寫入數(shù)據(jù)的文件輸出流。
        FileOutputStream(FileDescriptor fdObj) 創(chuàng)建一個(gè)向指定文件描述符處寫入數(shù)據(jù)的輸出文件流,
                  該文件描述符表示一個(gè)到文件系統(tǒng)中的某個(gè)實(shí)際文件的現(xiàn)有連接。


        FileOutputStream(String name) 創(chuàng)建一個(gè)向具有指定名稱的文件中寫入數(shù)據(jù)的輸出文件流。
              使用方法及注意事項(xiàng):
                    如: FileOutputStream fo = new FileOutputStream("filme.txt");
                  1、會(huì)在程序執(zhí)行路徑下創(chuàng)建一個(gè)filme.txt文件,該路徑不因包名的變化而變化,只在執(zhí)行路徑下。
                  2、如果該路徑下已有同名文件,那么該文件會(huì)被覆蓋。

        FileOutputStream(String name, boolean append) 根據(jù)給定的文件名以及指示是否附加寫入數(shù)據(jù)的 boolean 值來構(gòu)造 FileWriter 對象。
              使用方法及注意事項(xiàng):
                    如: FileOutputStream fo = new FileOutputStream("filme.txt",true);
                  1、如果傳入的參數(shù)為true,會(huì)在程序執(zhí)行路徑下打開一個(gè)已有的filme.txt文件。
                  2、如果該路徑下沒有該文件,則新建一個(gè)該文件, 并在文件末尾添加數(shù)據(jù)。
                  3、如果傳入的參數(shù)為false,無論有無文件都會(huì)新建該文件。

        示例:1、以傳入文件名的方式創(chuàng)建一個(gè)FileOutputStream對象(該對象一被初始化就必須明確被操作的文件)
           2、而且該文件會(huì)被新創(chuàng)建到指定目錄下。
           ??3、路勁描述: 如: "D:\\java\\myclass\\winter.txt"




    寫入方法:void write(byte[] b) 將 b.length 個(gè)字節(jié)從指定 byte 數(shù)組寫入此文件輸出流中。
         void write(byte[] b, int off, int len) 將指定 byte 數(shù)組中從偏移量 off 開始的 len 個(gè)字節(jié)寫入此文件輸出流。
         ??void write(int c) 寫入指定字節(jié)(就是寫入該int型數(shù)的低八位,最后一個(gè)字節(jié))。

            如: fo.write("winter is coming".getBatys());

            注意:字節(jié)流與字符流不同,這里每寫入一個(gè)字節(jié)都會(huì)直接存入文件中,不需要flush()。

               off表示開始角標(biāo), len為長度。

    刷新方法: 字節(jié)流不需要刷新,沒有flush方法。


    關(guān)閉方法:void close() 關(guān)閉此流。

            如: fo.close();
              ?(為了節(jié)約Windows資源,最后一定要 close ,關(guān)閉io。)


        注意:1、 幾乎所有的IO操作都會(huì)拋出 IOException 異常,注意對異常的處理(try、catch或者throws)
           2、在程序調(diào)用Io結(jié)束后,一定使用 close語句結(jié)束流對象。





二)、InputStream :字符輸入流。
    以一個(gè)操作文件的例子進(jìn)行說明: FileInputStream (說明,該類對象必須指向一個(gè)文件,)


    構(gòu)造方法:
        FileInputStream(String name) 在給定從中讀取數(shù)據(jù)的文件名的情況下創(chuàng)建一個(gè)新 FileInputStream
              使用方法及注意事項(xiàng):
                    如: FileInputStream fi = new FileInputStream("filme.txt");
                 1、創(chuàng)建一個(gè)FileInputStream對象,該對象會(huì)指向 filme.txt 文件。
                 2、該文件必須存在,否則拋出 FileNotFoundException 異常。

        FileInputStream(FileDescriptor fdObj) 通過使用文件描述符 fdObj 創(chuàng)建一個(gè) FileInputStream,
                          該文件描述符表示到文件系統(tǒng)中某個(gè)實(shí)際文件的現(xiàn)有連接。

        FileInputStream(File file) 通過打開一個(gè)到實(shí)際文件的連接來創(chuàng)建一個(gè) FileInputStream,
                      該文件通過文件系統(tǒng)中的 File 對象 file 指定。

    取出方法:
        int read() 讀取單個(gè)字節(jié)數(shù)據(jù), 返回值為該字節(jié)值, 可使用(char)強(qiáng)轉(zhuǎn)為字符形式。
             從文件的開頭, 隨著該方法的不斷調(diào)用,一直讀到文件結(jié)尾, 之后返回 -1.

             取出的字節(jié)本身只有8為,但是變?yōu)閕nt型被補(bǔ)0到了32為(平時(shí)提升是補(bǔ)1,但是此處有位與255操作).

                    如: int i = fi.read(), char c = (char)i;

        int read(byte[] b, int off, int len) 將字節(jié)數(shù)據(jù)讀入字節(jié)數(shù)組的某一部分
             將文件中的數(shù)據(jù)從文件頭開始讀取,并存入數(shù)組,直到文件中數(shù)據(jù)讀完 或者 數(shù)組位置存滿。
             只要文件中還有數(shù)據(jù)可讀,便返回讀取的字節(jié)個(gè)數(shù)。如果文件中已經(jīng)沒有數(shù)據(jù)可讀,返回-1.
                    如: int i = 0; baty [] b = new baty[1024];
                      ?while((i = fi.read(c))!=-1)
                      ?{ System.out.print(new String(b,0,i)); }

    獲取文件字節(jié)數(shù):
        int available() 返回下一次對此輸入流調(diào)用的方法可以不受阻塞地從此輸入流讀取(或跳過)的估計(jì)剩余字節(jié)數(shù)。
              即:返回剩余的字節(jié)數(shù)。
              可以用來作為定義接受數(shù)據(jù)的字節(jié)數(shù)組長度的依據(jù), 但是大型文件(如視頻等)不建議使用該方法。


    結(jié)束方法:
        void close() 關(guān)閉該流并釋放與之關(guān)聯(lián)的所有資源。 此語句為必須執(zhí)行語句。



二、字節(jié)流的 緩沖功能

    緩沖區(qū)的出現(xiàn)是為了增加流的效率的,所以建立緩沖區(qū)之前必須要先有流對象。
    緩沖區(qū)對象只是給傳入的流對象加了一個(gè)緩沖區(qū),他的所有的讀、寫功能其實(shí)還是在調(diào)用原來的流對象的功能(close關(guān)閉的是流對象)

一)、BufferedOutputStream :

    構(gòu)造方法:
        BufferedOutputStream(OutputStream out) 創(chuàng)建一個(gè)新的緩沖輸出流,以將數(shù)據(jù)寫入指定的底層輸出流。
              如:FileOutputStream fo = new FileOutputStream()
                BufferedOutputStream bo = new BufferedOutputStream(fo);
            為流對象 fo建立了一個(gè)緩沖區(qū)對象fo。

        BufferedOutputStream(OutputStream out, int size) 創(chuàng)建一個(gè)新的緩沖輸出流,以將具有指定緩沖區(qū)大小的數(shù)據(jù)寫入指定的底層輸出流。
              如:FileOutputStream fo = new FileOutputStream()
                BufferedOutputStream bo = new BufferedOutputStream(fo,1024);
            為流對象 fo建立了一個(gè)緩沖區(qū)對象 bo,緩沖長度為 1024個(gè)字符。
    寫入方法:
        void write(byte[] b, int off, int len) 將指定 byte 數(shù)組中從偏移量 off 開始的 len 個(gè)字節(jié)寫入此緩沖的輸出流。

        void write(int b) 將指定的字節(jié)寫入此緩沖的輸出流。(其指定字節(jié)就是int型數(shù)據(jù)的最后八位)

                與傳入的流對象相同, 這些方法底層就是在調(diào)用流對象的相應(yīng)方法。

    關(guān)閉方法:void close();
          與傳入的流對象相同, 此方法底層就是在調(diào)用流對象的close方法,緩沖區(qū)調(diào)用了過后,流對象不用重復(fù)關(guān)閉。

    其他方法:
        void flush() 刷新此緩沖的輸出流。




二)、BufferedInputStream:

    構(gòu)造方法:
        BufferedInputStream(InputStream in) 創(chuàng)建一個(gè) BufferedInputStream 并保存其參數(shù),即輸入流 in,以便將來使用。
                    如:FileInputStream fi = new FileInputStream()
                      BufferedInputStream bi = new BufferedInputStream(fi);
                  為流對象 fi建立了一個(gè)緩沖區(qū)對象 bi。

        BufferedInputStream(FileInputStream in, int sz) 創(chuàng)建具有指定緩沖區(qū)大小的 BufferedInputStream 并保存其參數(shù),。
                    如:FileInputStream fi = new FileInputStream()
                      BufferedInputStream bi = new BufferedInputStream(fi,1024);
                  為流對象 fi建立了一個(gè)緩沖區(qū)對象 bi,緩沖長度為1024個(gè)字符。


    取出方法: 基本方法有流對象的相同(因?yàn)樵谡{(diào)用流對象方法), 但是多了一個(gè)行讀取方法。

        int read() 讀取單個(gè)字節(jié),返回值為該字節(jié)前補(bǔ) 0 至4個(gè)字節(jié)長度(write的 時(shí)候只寫入最后一個(gè)字節(jié))

                    (本來數(shù)據(jù)提升是在前補(bǔ)1的,但是此處內(nèi)部有位與255操作)
             從文件的開頭, 隨著該方法的不斷調(diào)用,一直讀到文件結(jié)尾, 之后返回 -1.



        int read(bate[] cbuf, int off, int len) 將字節(jié)讀入數(shù)組的某一部分
            將文件中的數(shù)據(jù)從文件頭開始讀取,并存入數(shù)組,知道文件中數(shù)據(jù)讀完 或者 數(shù)組位置存滿。
            只要文件中還有數(shù)據(jù)可讀,便返回讀取的字節(jié)個(gè)數(shù)。如果文件中已經(jīng)沒有數(shù)據(jù)可讀,返回-1.
                  如: int i = 0; Bate [] b = new Bate[1024];
                    ?while((i = bi.read(b))!=-1)
                    ?{ System.out.print(new String(b,0,i)); }


    結(jié)束方法:
        void close() 關(guān)閉該流并釋放與之關(guān)聯(lián)的所有資源。 此語句為必須執(zhí)行語句。
              底層調(diào)用 流對象的 close 方法。

轉(zhuǎn)載于:https://www.cnblogs.com/soficircle/p/6714315.html

總結(jié)

以上是生活随笔為你收集整理的io系列之字节流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。