久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Java基礎筆記 – IO流分類詳細介紹和各種字節(jié)流類介紹與使用 過濾流 字節(jié)流 | IT...

 X的世界 2012-04-08
Java基礎筆記 – IO流分類詳細介紹和各種字節(jié)流類介紹與使用 過濾流 字節(jié)流
本文由 arthinking 發(fā)表于170 天前 ? 原創(chuàng)文章 ? Java基礎 ? 評論數(shù) 1 ? 被圍觀 506 views+
Java IO流詳細介紹

Java中流的實現(xiàn)是在java.io包中定義類的層次結(jié)構(gòu)的,。

1,、分類:
1.1、按流向分類:
輸入流: 程序可以從中讀取數(shù)據(jù)的流,。
輸出流: 程序能向其中寫入數(shù)據(jù)的流,。
1.2、按數(shù)據(jù)傳輸單位分類:

字節(jié)流:以字節(jié)(8位二進制)為單位進行處理,。主要用于讀寫諸如圖像或聲音的二進制數(shù)據(jù),。

字符流:以字符(16位二進制)為單位進行處理。

都是通過字節(jié)流的方式實現(xiàn)的,。字符流是對字節(jié)流進行了封裝,,方便操作,。在最底層,所有的輸入輸出都是字節(jié)形式的,。

1.3,、按功能分類:

節(jié)點流:從特定的地方讀寫的流類,如磁盤或者一塊內(nèi)存區(qū)域,。

過濾流:使用節(jié)點流作為輸入或輸出,。過濾流是使用一個已經(jīng)存在的輸入流或者輸出流連接創(chuàng)建的。

2,、字節(jié)流
2.1,、輸入流:
2.1.1、字節(jié)輸入流抽象類及其關鍵的方法:
java.io
InputStream
java.lang.Object
java.io.InputStream
abstract int read()
從輸入流中讀取數(shù)據(jù)的下一個字節(jié),。
int read(byte[] b)
從輸入流中讀取一定數(shù)量的字節(jié),,并將其存儲在緩沖區(qū)數(shù)組 b 中。
int read(byte[] b, int off, int len)
將輸入流中最多 len 個數(shù)據(jù)字節(jié)讀入 byte 數(shù)組,。
2.1.2,、輸入流的操作:
打開一個輸入流
循環(huán)讀取
關閉輸入流

這里使用InputStream的子類FileInputStream讀入文件:

public static void main(String[] args) throws IOException {

    //創(chuàng)建文件輸入流
    InputStream is = new FileInputStream("D:/itzhai/arthinking.txt");
    //創(chuàng)建字節(jié)緩沖
    byte[] buffer = new byte[100];
    int length = 0;
    //以字節(jié)形式循環(huán)讀取文件
    while((length = is.read(buffer, 0, buffer.length)) != -1){
        //把字節(jié)轉(zhuǎn)換成字符并輸出
        String str =new String(buffer, 0, length);
        System.out.println(str);
    }
}
2.1.3、抽象類InputStream的類層次:

2.1.4,、字節(jié)數(shù)組輸入流ByteArrayInputStream

把字節(jié)數(shù)組作為源的輸入流,。

相關例子:

字節(jié)數(shù)組輸入流:

public static void main(String[] args) {

    //創(chuàng)建讀取數(shù)據(jù)源
    String input = "arthinking";
    //獲取字節(jié)數(shù)組
    byte[] b = input.getBytes();
    //創(chuàng)建字節(jié)數(shù)組輸出流
    ByteArrayInputStream bis = new ByteArrayInputStream(b);
    //循環(huán)逐個讀取
    for(int i = 0; i < input.length(); i++){
        int c;
        //讀取下一個字節(jié)
        while((c = bis.read()) != -1){
            System.out.print((char)c);
        }
    }
    //將緩沖區(qū)的位置重置為標記位置
    bis.reset();
}

字節(jié)數(shù)組輸出流:

public static void main(String[] args) throws IOException {

    //創(chuàng)建字節(jié)輸出流
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    String output = "arthinking";
    //創(chuàng)建需要輸出的字節(jié)數(shù)組
    byte[] buffer = output.getBytes();
    //把字節(jié)數(shù)組寫到輸出流
    bos.write(buffer);
    //創(chuàng)建文件輸出流
    OutputStream os = new FileOutputStream("D:/itzhai/arthinking.txt");
    //把字節(jié)輸出流寫到文件輸出流
    bos.writeTo(os);

}
2.2、輸出流:
2.2.1,、字節(jié)輸出流的抽象類及其最關鍵的方法:
java.io
OutputStream
java.lang.Object
java.io.OutputStream
void write(byte[] b)
將 b.length 個字節(jié)從指定的 byte 數(shù)組寫入此輸出流,。
void write(byte[] b, int off, int len)
將指定 byte 數(shù)組中從偏移量 off 開始的 len 個字節(jié)寫入此輸出流。
abstract void write(int b)
將指定的字節(jié)寫入此輸出流,。

由此可以看出,,只有最后一個方法才是抽象的,原因是前面兩個都調(diào)用了第三個抽象方法,,這樣繼承這個抽象類的子類都必須提供抽象的write(int b)的實現(xiàn),,從而使得每個子類的實現(xiàn)都不一樣。

2.2.2,、輸出流的操作:
打開輸出流
循環(huán)寫入
關閉輸入流

這里使用了OutputStream的子類FileOutputStream輸出到文件:

public static void main(String[] args) throws IOException {
    //創(chuàng)建一個輸出流
    OutputStream os = new FileOutputStream("D:/itzhai/arthinking.txt", true);
    String output = "http://www.";
    //從字符串中獲取字節(jié)數(shù)組
    byte[] buffer = output.getBytes();
    //寫出到輸出流
    os.write(buffer);
    //關閉輸出流
    os.close();
}
2.2.3,、抽象類OutputStream的類層次結(jié)構(gòu):

3、過濾流:

過濾流不能直接跟文件打交道,,只能通過節(jié)點流進行相關的操作,。可以從其構(gòu)造方法中看出:

FilterOutputStream(OutputStream out)

需要傳入一個OutputStream,。

在InputStream和OutputStream的子類中,,F(xiàn)ilterInputStream和FilterOutputStream是過濾流,,其又派生出子類DataInputStream和DataOutputStream數(shù)據(jù)輸入流和數(shù)據(jù)輸出流,。

過濾流的主要特點是在輸入輸出數(shù)據(jù)同時對所傳輸?shù)臄?shù)據(jù)做指定類型或格式的轉(zhuǎn)換,。

3.1,、緩沖輸出流BufferedOutputStream

該類實現(xiàn)緩沖的輸出流,。通過設置這種輸出流,,應用程序就可以將各個字節(jié)寫入底層輸出流中,而不必針對每次字節(jié)寫入調(diào)用底層系統(tǒng),。

當緩沖區(qū)寫滿或者關閉輸出流時,,一次性輸出到流,,或者調(diào)用flush()方法主動將緩沖區(qū)輸出到流,。

3.2,、過濾流的使用例子:

使用過濾流類BufferedOutputStream和DataOutputStream裝飾FilterOutputStream的例子:

public static void main(String[] args) throws IOException {

    //創(chuàng)建數(shù)據(jù)輸出流
    DataOutputStream dos = new DataOutputStream(
            new BufferedOutputStream(new FileOutputStream("D:/itzhai/arthinking.txt")));
    byte a = 1;
    char b = 'a';
    int c = 2;
    //使用數(shù)據(jù)輸出流對象的方法寫出數(shù)據(jù)到輸出流
    dos.write(a);
    dos.write(b);
    dos.write(c);
    //關閉數(shù)據(jù)輸出流
    dos.close();
    //創(chuàng)建數(shù)據(jù)輸入流
    DataInputStream dis = new DataInputStream(
            new BufferedInputStream(new FileInputStream("D:/itzhai/arthinking.txt")));
    //使用數(shù)據(jù)輸入流的方法從輸入流中讀取數(shù)據(jù)
    System.out.println(dis.readByte() + dis.readChar() + dis.readInt());
    //關閉數(shù)據(jù)輸入流
    dis.close();
}

使用DataInputStream和DataOutputStream數(shù)據(jù)文件流的一般步驟:

① 創(chuàng)建字節(jié)文件流對象
② 基于字節(jié)文件流對象建立數(shù)據(jù)文件流對象
③ 用數(shù)據(jù)文件流對象的方法對基本類型的數(shù)據(jù)進行輸入/輸出
4、IO流的鏈接:
Input Stream Chain

FileInputStream --> BufferedInputStream --> DataInputStream --> 數(shù)據(jù)

Output Stream Chain

數(shù)據(jù) --> DataOutputStream --> BufferedOutputStream --> FileOutputStream

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多