欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的字節(jié)流InputStream和OutputStream詳解

 更新時間:2023年10月26日 08:53:22   作者:CodeJiao  
這篇文章主要介紹了Java中的字節(jié)流InputStream和OutputStream詳解,繼承自InputStream的流都是用于向程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字節(jié)8bit,我們看到的具體的某一些管道,凡是以InputStream結(jié)尾的管道,都是以字節(jié)的形式向我們的程序輸入數(shù)據(jù),需要的朋友可以參考下

1. InputStream(字節(jié)輸入流)

  • 我們看到的具體的某一些管道,凡是以InputStream結(jié)尾的管道,都是以字節(jié)的形式向我們的程序輸入數(shù)據(jù)。
  • 繼承自InputStream的流都是用于向程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字節(jié)(Byte)=> (8bit);下圖中深色為節(jié)點流,淺色為處理流。

在這里插入圖片描述

InputStream的基本方法

        //讀取一個字節(jié)并以整數(shù)的形式返回(0~255)
        // 如果返回-1就說明已經(jīng)到了輸入流的末尾
        int read () throws IOException

        //讀取一系列字節(jié)并存儲到一個數(shù)組buffer
        // 返回實際讀取的字節(jié)數(shù),如果讀取前已到輸入流的末尾,則返回-1
        int read ( byte[] buffer) throws IOException

        //從offset位置開始,讀取length個字節(jié),并存儲到一個字節(jié)數(shù)組buffer,
        // 返回實際讀取的字節(jié)數(shù),如果讀取前以到輸入流的末尾返回-1.
        int read ( byte[] buffer, int offset, int length) throws IOException

        //關(guān)閉流釋放內(nèi)存資源
        void close () throws IOException

        //跳過n個字節(jié)不讀,返回實際跳過的字節(jié)數(shù)
        long skip(long n) throws IOException

read()方法是一個字節(jié)一個字節(jié)地往外讀,每讀取一個字節(jié),就處理一個字節(jié)。read(byte[] buffer)方法讀取數(shù)據(jù)時,先把讀取到的數(shù)據(jù)填滿這個byte[]類型的數(shù)組buffer(buffer是內(nèi)存里面的一塊緩沖區(qū)),然后再處理數(shù)組里面的數(shù)據(jù)。這就跟我們?nèi)∷粯?,先用一個桶去接,等桶接滿水后再處理桶里面的水。如果是每讀取一個字節(jié)就處理一個字節(jié),這樣子讀取也太累了。

【演示:使用FileInputStream流來讀取FileInputStream.java文件的內(nèi)容】

read.txt

在這里插入圖片描述

在這里插入圖片描述

Test.java

package character1;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


public class Test {
    public static void main(String[] args) {
        // 使用變量b來裝調(diào)用read()方法時返回的整數(shù)
        int b = 0;
        /*
        使用FileInputStream流來讀取有中文的內(nèi)容時,讀出來的是亂碼,
        因為使用 InputStream流里面的read()方法讀取內(nèi)容時是一個字節(jié)一個字節(jié)地讀取的,
        而一個漢字是占用兩個 字節(jié)的,所以讀取出來的漢字無法正確顯示。

        使用FileReader流來讀取內(nèi)容時,中英文都可以正確顯示,
        因為Reader流里面的 read()方法是一個字符一個字符地讀取的,
        這樣每次讀取出來的都是一個完整的漢字,這樣就可以正確 顯示了。
         */
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream("E:\\IDEACode\\ketangpai\\file-test\\src\\character1\\resource\\read.txt");
        } catch (FileNotFoundException e) {
            System.out.println("系統(tǒng)找不到指定的文件");
            System.exit(-1);// 系統(tǒng)非正常退出
        }

        long num = 0; //  使用變量num來記錄讀取到的字符數(shù)

        // 調(diào)用read()方法時會拋異常,所以需要捕獲異常
        try {
            /*
            調(diào)用int read() throws Exception方法時,返回的是一個int類型的整數(shù)
            循環(huán)結(jié)束的條件就是返回一個值-1,表示此時已經(jīng)讀取到文件的末尾了。
             */
            while ((b = inputStream.read()) != -1) {
                // “char(b)”把使用數(shù)字(ASCII碼)英文字母轉(zhuǎn)換成字符輸入
                System.out.print((char) b);
                num++;
            }
            inputStream.close();// 關(guān)閉輸入流
            System.out.println("總共讀取了" + num + "個字節(jié)的文件");
        } catch (IOException e) {
            System.out.println("文件讀取錯誤");
            System.exit(-1);// 系統(tǒng)非正常退出
        }
    }
}

在這里插入圖片描述

2. OutputStream(輸出流)

繼承自O(shè)utputStream的流是用于程序中輸出數(shù)據(jù),且數(shù)據(jù)的單位為字節(jié)(Byte)=> (8bit);下圖中深色的為節(jié)點流,淺色為處理流。

在這里插入圖片描述

OutputStream的基本方法:

在這里插入圖片描述

案例: 【使用FileOutputStream流往一個文件里面寫入數(shù)據(jù)】

在這里插入圖片描述

Test.java

package character1;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


public class Test {
    public static void main(String[] args) throws IOException {
        // 使用變量b來裝調(diào)用read()方法時返回的整數(shù)
        int b = 0;
        try (FileInputStream inputStream = new FileInputStream("E:\\IDEACode\\ketangpai\\file-test\\src\\character1\\resource\\read.txt");
             FileOutputStream outputStream = new FileOutputStream("\\IDEACode\\ketangpai\\file-test\\src\\character1\\resource\\write.txt")) {
            while ((b = inputStream.read()) != -1) {
                outputStream.write(b);
            }
        } catch (IOException e) {
            System.out.println("讀取文件異常");
            System.exit(-1);// 系統(tǒng)非正常退出
        }
        System.out.println("文件寫入成功");
    }
}

在這里插入圖片描述

write.txt

在這里插入圖片描述

3. 小結(jié)

FileInputStream和FileOutputStream這兩個流都是字節(jié)流,都是以一個字節(jié)為單位進行輸入和輸出的。

所以對于占用2個字節(jié)存儲空間的字符來說讀取出來時就會顯示成亂碼。

到此這篇關(guān)于Java中的字節(jié)流InputStream和OutputStream詳解的文章就介紹到這了,更多相關(guān)Java的InputStream和OutputStream內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot上傳文件過大的500異常解決

    springboot上傳文件過大的500異常解決

    這篇文章主要介紹了springboot上傳文件過大的500異常解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • idea如何解決commit代碼時一直code Analyze加載的問題

    idea如何解決commit代碼時一直code Analyze加載的問題

    文章介紹了解決Git提交代碼時出現(xiàn)codeAnalyze加載卡頓問題的方法,即關(guān)閉IDEA中的相關(guān)設(shè)置選項,作者分享個人經(jīng)驗,希望對大家有所幫助,并鼓勵支持腳本之家
    2025-01-01
  • java常用工具類 UUID、Map工具類

    java常用工具類 UUID、Map工具類

    這篇文章主要為大家詳細介紹了Java常用工具類,包括UUID工具類、Map工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Java中常見的陷阱題及答案

    Java中常見的陷阱題及答案

    在電腦里找到一份當(dāng)時學(xué)習(xí)JAVA時的筆記,看到一些現(xiàn)在已經(jīng)遺忘的細節(jié)。稍微整理了幾個,發(fā)出來與大家分享。這篇文章主要介紹了Java中常見的陷阱題及答案,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • 如何解決通過spring-boot-maven-plugin package失敗問題

    如何解決通過spring-boot-maven-plugin package失敗問題

    這篇文章主要介紹了如何解決通過spring-boot-maven-plugin package失敗問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • redis與ssm整合方法(mybatis二級緩存)

    redis與ssm整合方法(mybatis二級緩存)

    本文給大家介紹redis與ssm整合方法(mybatis二級緩存)。主要是利用redis去做mybatis的二級緩存,mybaits映射文件中所有的select都會刷新已有緩存,如果不存在就會新建緩存,所有的insert,update操作都會更新緩存
    2017-12-12
  • 利用Java實現(xiàn)word導(dǎo)入導(dǎo)出富文本(含圖片)的詳細代碼

    利用Java實現(xiàn)word導(dǎo)入導(dǎo)出富文本(含圖片)的詳細代碼

    這篇文章主要為大家詳細介紹了利用Java實現(xiàn)word導(dǎo)入導(dǎo)出富文本(含圖片),文中的示例代碼講解詳細,對大家的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2024-02-02
  • 對Java的面對對象編程中對象和引用以及內(nèi)部類的理解

    對Java的面對對象編程中對象和引用以及內(nèi)部類的理解

    這篇文章主要介紹了對Java的面對對象編程中對象和引用以及內(nèi)部類的理解,需要的朋友可以參考下
    2016-01-01
  • Java超過long類型的數(shù)據(jù)表示方法

    Java超過long類型的數(shù)據(jù)表示方法

    這篇文章主要給大家介紹Java超過long類型的數(shù)據(jù)如何表示,在 Java 中,如果需要表示超過 long 類型范圍的數(shù)據(jù),可以使用 BigInteger 類,BigInteger 是 Java 提供的一個用于處理任意精度整數(shù)的類,它可以表示非常大或非常小的整數(shù),需要的朋友可以參考下
    2023-09-09
  • Java ThreadLocal的使用詳解

    Java ThreadLocal的使用詳解

    ThreadLocal是線程私有的局部變量存儲容器,可以理解成每個線程都有自己專屬的存儲容器,用來存儲線程私有變量。ThreadLocal 在日常開發(fā)框架中應(yīng)用廣泛,但用不好也會出現(xiàn)各種問題,本文就此講解一下。
    2021-05-05

最新評論