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

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

 更新時(shí)間: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é)點(diǎn)流,淺色為處理流。

在這里插入圖片描述

InputStream的基本方法

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

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

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

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

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

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

【演示:使用FileInputStream流來(lái)讀取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來(lái)裝調(diào)用read()方法時(shí)返回的整數(shù)
        int b = 0;
        /*
        使用FileInputStream流來(lái)讀取有中文的內(nèi)容時(shí),讀出來(lái)的是亂碼,
        因?yàn)槭褂?InputStream流里面的read()方法讀取內(nèi)容時(shí)是一個(gè)字節(jié)一個(gè)字節(jié)地讀取的,
        而一個(gè)漢字是占用兩個(gè) 字節(jié)的,所以讀取出來(lái)的漢字無(wú)法正確顯示。

        使用FileReader流來(lái)讀取內(nèi)容時(shí),中英文都可以正確顯示,
        因?yàn)镽eader流里面的 read()方法是一個(gè)字符一個(gè)字符地讀取的,
        這樣每次讀取出來(lái)的都是一個(gè)完整的漢字,這樣就可以正確 顯示了。
         */
        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來(lái)記錄讀取到的字符數(shù)

        // 調(diào)用read()方法時(shí)會(huì)拋異常,所以需要捕獲異常
        try {
            /*
            調(diào)用int read() throws Exception方法時(shí),返回的是一個(gè)int類型的整數(shù)
            循環(huán)結(jié)束的條件就是返回一個(gè)值-1,表示此時(shí)已經(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 + "個(gè)字節(jié)的文件");
        } catch (IOException e) {
            System.out.println("文件讀取錯(cuò)誤");
            System.exit(-1);// 系統(tǒng)非正常退出
        }
    }
}

在這里插入圖片描述

2. OutputStream(輸出流)

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

在這里插入圖片描述

OutputStream的基本方法:

在這里插入圖片描述

案例: 【使用FileOutputStream流往一個(gè)文件里面寫入數(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來(lái)裝調(diào)用read()方法時(shí)返回的整數(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這兩個(gè)流都是字節(jié)流,都是以一個(gè)字節(jié)為單位進(jìn)行輸入和輸出的。

所以對(duì)于占用2個(gè)字節(jié)存儲(chǔ)空間的字符來(lái)說(shuō)讀取出來(lái)時(shí)就會(huì)顯示成亂碼。

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

相關(guān)文章

  • springboot上傳文件過(guò)大的500異常解決

    springboot上傳文件過(guò)大的500異常解決

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

    idea如何解決commit代碼時(shí)一直code Analyze加載的問(wèn)題

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

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

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

    Java中常見(jiàn)的陷阱題及答案

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

    如何解決通過(guò)spring-boot-maven-plugin package失敗問(wèn)題

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

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

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

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

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

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

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

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

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

    Java ThreadLocal的使用詳解

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

最新評(píng)論