中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

java~字(zi)節流和(he)字(zi)符流

如果要進行(xing)文件(jian)內容的操作那(nei)么必須依(yi)靠數(shu)據(ju)流完成,而(er)數(shu)據(ju)流分為(wei)兩(liang)種(zhong):

  • 字節流:InputStream(字節輸入流)、OutputStream(字節輸出流)
  • 字符流:Reader(字符輸入流)、Writer(字符輸出流)

輸入和輸出是針對內(nei)存來說的:

  • 輸入流:字節(網絡,磁盤)–> 自動轉換為 –>字符(內存);
  • 輸出流:字符(內存)–> 自動轉換為–>字節(網絡,磁盤);

區別

字(zi)節流(liu)與(yu)字(zi)符流(liu)操(cao)作(zuo)的本(ben)質區(qu)別只有一個:字(zi)節流(liu)是(shi)原(yuan)生的操(cao)作(zuo),而字(zi)符流(liu)是(shi)經過處(chu)理(li)后的操(cao)作(zuo)。

  • 在進行網絡數據傳輸磁盤數據所支持的數據類型只有:字節
  • 而所有磁盤中的數據必須先讀取到內存后才能進行操作,而內存中會幫助我們把字節變為字符。字符更加適合處理中文。

操作流程

不管(guan)使用的(de)是字(zi)節流還是字(zi)符(fu)流,其基本的(de)操作流程(cheng)幾乎是一樣的(de),以文件操作為例。

  1. 創建File類對象 ,主要是指明要操作的文件路徑;
  2. 根據字節流或字符流的子類實例化父類對象 ;
  3. 進行數據的讀取或寫入操作;
  4. 關閉流(close());

對于IO操(cao)作(zuo)屬于資源(yuan)處(chu)(chu)理,所有的資源(yuan)處(chu)(chu)理操(cao)作(zuo)(IO操(cao)作(zuo)、數據庫操(cao)作(zuo)、網絡)最(zui)后(hou)必須(xu)要進行(xing)關閉(bi)。

字節輸出流:(OutputStream)

字節輸出流主要以(yi)操作byte數據為(wei)主,觀察java.io.OutputStream類的定義(yi)結構:

public abstract class OutputStream implements Closeable, Flushable

OutputStream類實(shi)現了(le)Closeable,Flushable兩個(ge)接(jie)口(kou),這兩個(ge)接(jie)口(kou)中(zhong)的(de)方法:

  1. Closeable: public void close() throws IOException;
  2. Flushable: public void flush() throws IOException;

實例:文件的輸出

public class Demo {
    public static void main(String[] args) throws IOException {
        //第一步:定義要輸出的文件的File類對象
        File file = new File("e:"+File.separator+"hello"+File.separator+"my.txt");
        //輸出信息的時候文件可以不存在,但是目錄必須存在
        if(!file.getParentFile().exists()) {//父路徑不存在
            file.getParentFile().mkdirs();//創建父路徑
        }
        //第二步:利用OutputStream的子類為父類進行實例化
        OutputStream output = new FileOutputStream(file);
        //第三步:輸出文字信息
        String msg = "富則達濟天下,窮則獨善其身";//字符串
        //為了方便輸出需要將字符串變為字節數組
        byte data[] = msg.getBytes();//變為字節數組
        output.write(data);//輸出數據
        output.close();//關閉流
    }
}

字節輸入流:(InputStream)

InputStream可以實現數據的讀取操作,在java中InputStream類的定義如下:

public abstract class InputStream implements Closeable

InputStream類中定義有三個數(shu)據的(de)讀取操作方法:

  1. 讀取單個字節:public abstract int read() throws
    IOException;
    每次執行此方法將讀取當個字節數據,如果已經讀取完成了,那么最后返回-1。
  2. 讀取數據到字節數組中:public int read(byte b[]) throws IOException.最常用方法
    每次講數據讀取到數組之中,那么會返回一個讀取長度的數據,如果沒有數據則返回的長度為-1,可是要考慮兩種情況:要讀取的內容大于開辟的數組內容:長度就是整個數組的長度。要讀取的內容小于開辟數組的內容,
    長度就是全部最后的內容長度,數組裝不滿。
  3. 讀取部分內容到字節數組中:public int read(byte b[], int off,int len) throws IOException
    每次讀取內容到部分字節數組,只允許讀取滿限制的數組的字節個數。此方法依然會返回讀取的長度。

InputStream是一個(ge)抽(chou)象類(lei),所以要(yao)進行文件的讀取(qu)使用FileInputStream子(zi)(zi)類(lei),子(zi)(zi)類(lei)定(ding)義(yi)的構造(zao)方法如下:

構造方法:public FileInputStream(File file) throws FileNotFoundException.
@SuppressWarnings("unused")
public class Demo {
    public static void main(String[] args) throws IOException {
        //第一步:定義要輸出的文件的File類對象
        File file = new File("e:"+File.separator+"hello"+File.separator+"my.txt");
        //第二步:實例化InputStream
        InputStream input = new FileInputStream(file);
        //實現數據的讀取操作
        byte data[] = new byte[1024];
        int len = input.read(data);//將數據讀取到數組之中
        System.out.println("讀取的內容【" +new String(data,0,len)+"】");
        //第四步關閉輸入流
        input.close();
    }
}

字符輸出流:(Writer)

Writer是進行(xing)字(zi)符(fu)輸出操作使用的(de)類,這(zhe)個類屬于抽象類,觀察定義:

public abstract class Writer implements Appendable, Closeable, Flushable

這個Writer類可以直(zhi)接(jie)輸出(chu)字符(fu)串(chuan):public void write(String str) throws IOException

Writer是一個抽象類,要進行文(wen)件字符流操作(zuo),其(qi)構造方法為:

@SuppressWarnings("unused")
public class Demo {
    public static void main(String[] args) throws IOException {
        //第一步:定義要輸出的文件的File類對象
        File file = new File("e:"+File.separator+"hello"+File.separator+"my.txt");//你的路徑
        if(!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        Writer out = new FileWriter(file);
        String str = "一定要好好學習,天天向上。。。";
        out.write(str);
        out.close();
    }
}

雖然Writer類提供有字符數組的輸出操作能力,但是從本質上來講使用Writer類就意味著要執行字符串的直接輸出。
字符流最適合操作中文,但并不意味著字節流就無法操作中文。

字符輸入流:(Reader)

Reader一(yi)定(ding)是一(yi)個抽象類,其(qi)定(ding)義為:

public abstract class Reader extends Object implements Readable,Closeable

在Reader類中也提供有一系列(lie)的(de)read()方法。

  • 數據的讀取:public int read(char[] cbuf) throws IOException。

范例:數據的讀取

@SuppressWarnings("unused")
public class Demo {
    public static void main(String[] args) throws IOException {
        //第一步:定義要輸出的文件的File類對象
        File file = new File("e:"+File.separator+"hello"+File.separator+"my.txt");//你的路徑
        if(file.exists()) {
            Reader in = new FileReader(file);
            char data[] = new char[1024];
            int len = in.read(data);//向字符數組保存數據,返回長度。
            System.out.println(new String(data,0,len));
            in.close();
        }
    }
}

字節流與字符流的區別

首先必(bi)須要明(ming)確一點,通過任何終端(duan)(網絡、文(wen)件)讀取或者輸出的數(shu)據都(dou)一定是字(zi)節,字(zi)符是經過內(nei)存(cun)處理后的數(shu)據。

字符輸入:字節(磁盤)–> 自動轉換為 –>字符(內存);
字符輸出:字符(內存)–> 自動轉換為–>字節(磁盤);

在利用(yong)字符流輸(shu)出的(de)時(shi)候(hou),所有的(de)內容實際上都只是輸(shu)出到了緩(huan)(huan)沖區(qu)中(內存)。在使(shi)用(yong)close()方法關閉的(de)時(shi)候(hou)會將我們緩(huan)(huan)沖區(qu)的(de)數據(ju)進(jin)行輸(shu)出,如果(guo)沒有關閉,那么就將無法進(jin)行輸(shu)出,此時(shi)可以利用(yong)flush()方法進(jin)行強制的(de)輸(shu)出。

字(zi)符使用到了緩沖(chong)區(qu),而字(zi)節流(liu)沒有使用到緩沖(chong)區(qu)。

如果處(chu)理中文使用字符流(liu),其他(ta)的任何數據都使用字節(jie)流(liu)。

posted @ 2025-07-23 13:40  張占嶺  閱讀(128)  評論(0)    收藏  舉報