国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一步步帶你剖析Java中的Reader類

這篇具有很好參考價值的文章主要介紹了一步步帶你剖析Java中的Reader類。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文分享自華為云社區(qū)《深入理解Java中的Reader類:一步步剖析》,作者:bug菌。

前言

在Java開發(fā)過程中,我們經(jīng)常需要讀取文件中的數(shù)據(jù),而數(shù)據(jù)的讀取需要一個合適的類進行處理。Java的IO包提供了許多類用于數(shù)據(jù)的讀取和寫入,其中Reader便是其中之一。本文將對Java中的Reader進行詳細介紹,并分析其優(yōu)缺點及應(yīng)用場景。

摘要

本文將從以下幾個方面對Java中的Reader類進行詳細介紹:

  1. Reader類的概述
  2. Reader類代碼的解析
  3. Reader類的應(yīng)用場景案例
  4. Reader類的優(yōu)缺點分析
  5. Reader類的方法介紹及源代碼分析
  6. Reader類的測試用例
  7. 全文小結(jié)和總結(jié)
  8. 附源碼
  9. 建議

本文通過對Java中的Reader進行詳細講解,旨在幫助開發(fā)者更好地掌握Reader的使用方法。

Reader類

概述

Reader類是Java中用于讀取字符流的抽象類。它是所有字符輸入流的超類,提供了字符輸入流讀取時的基本功能。Reader類主要由三個類實現(xiàn),分別是InputStreamReader、FileReader和CharArrayReader。

源代碼解析

Reader類是一個抽象類,它的源代碼定義如下:

public abstract class Reader implements Readable, Closeable {
    ...
}

其中,Reader實現(xiàn)了兩個接口:ReadableCloseable。Readable接口中只定義了一個方法:

public interface Readable {
    int read(CharBuffer cb) throws IOException;
}

Closeable接口中也只定義了一個方法:

public interface Closeable extends AutoCloseable {
    void close() throws IOException;
}

這兩個接口的作用分別是提供讀取字符和關(guān)閉資源的方法。

應(yīng)用場景案例

Reader類通常用于讀取文本文件中的數(shù)據(jù)。比如我們經(jīng)常使用的BufferedReader就是Reader類的一個子類,用于逐行讀取文本文件中的數(shù)據(jù)。除此之外,Reader還可用于讀取網(wǎng)絡(luò)數(shù)據(jù)、讀取控制臺輸入等場景。

下面是幾個 使用Reader 類的應(yīng)用場景案例,同學們僅供參考:

1. 讀取文本文件

使用 FileReader 類來讀取文本文件很常見。例如可以使用?FileReader?和?BufferedReader?組合來讀取一個文本文件并逐行輸出:

    //1. 讀取文本文件
    public static void testReadFile(){
        FileReader fileReader;
        BufferedReader bufferedReader;
        try {
            fileReader = new FileReader("./template/fileTest.txt");
            bufferedReader = new BufferedReader(fileReader);
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
            fileReader.close();
            bufferedReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

通過上述案例,我們本地演示,結(jié)果可見如下:

2. 讀取網(wǎng)絡(luò)資源

可以使用 InputStreamReader 和 URL 類來讀取網(wǎng)絡(luò)資源,例如:

    //2. 讀取網(wǎng)絡(luò)資源
    public static void testReadURL() throws IOException {
        URL url = new URL("https://www.baidu.com/");
        URLConnection conn = url.openConnection();
        InputStream is = conn.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);

        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }

        br.close();
        isr.close();
        is.close();
    }

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

通過上述案例,我們本地演示,結(jié)果可見如下:

3. 讀取字符串

可以使用 StringReader 類來將一個字符串轉(zhuǎn)換為字符流,例如:

    //3. 讀取字符串
    public static void testReadStr() throws IOException {
        String str = "Hello, World!!!";
        StringReader stringReader = new StringReader(str);
        int data;
        while ((data = stringReader.read()) != -1) {
            System.out.print((char) data);
        }
        stringReader.close();
    }

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

通過上述案例,我們本地演示,結(jié)果可見如下:

通過介紹及演示以上三個比較常見的 Java 中運用 Reader 類的應(yīng)用場景案例,通過使用 Reader 類的子類,可以方便地讀取各種類型的字符流數(shù)據(jù)。如果你還有更多貼切生活或工作中的案例,歡迎評論區(qū)交流呀,獨樂樂不如眾樂樂。

利弊分析

優(yōu)點

  1. Reader類支持字符流的讀取,可以準確地讀取文本文件中的數(shù)據(jù)。
  2. Reader類能夠自動處理字符編碼問題,在讀取文件時能夠自動轉(zhuǎn)換編碼方式。
  3. 可以通過Reader類的各個子類實現(xiàn)不同的功能,使用靈活。

缺點

  1. Reader類讀取數(shù)據(jù)的速度較慢,不適合讀取二進制數(shù)據(jù)。
  2. Reader類不能隨機訪問文件中的數(shù)據(jù),只能逐行讀取,讀取大文件時效率較低。
  3. Reader類的使用較為繁瑣,需要通過緩沖區(qū)等方式來提高讀取速度和效率。

類代碼方法介紹

構(gòu)造方法

protected Reader()

Reader類的默認構(gòu)造方法。

方法

public int read() throws IOException

用處:讀取單個字符,并返回該字符的ASCII碼,如果到達流的末尾,返回-1。

public int read(char[] cbuf) throws IOException

用處:讀取字符數(shù)組,返回讀取的字符個數(shù)。

public int read(char[] cbuf, int offset, int length) throws IOException

用處:讀取指定長度的字符數(shù)組,返回讀取的字符個數(shù)。

public long skip(long n) throws IOException

用處:跳過n個字符(包括空格),返回實際跳過的字符數(shù)。

public boolean ready() throws IOException

用處:判斷是否可以從流中讀取字符,如果可以讀取返回true。

public boolean markSupported()

用處:判斷此流是否支持mark()操作。如果支持,則返回true,否則返回false。

public void mark(int readAheadLimit) throws IOException

用處:設(shè)置mark位置,并將輸入流中的指針指向mark位置。如果該流不支持mark()操作,則拋出IOException異常。

public void reset() throws IOException

用處:將輸入流中的指針重新指向mark位置。如果該流不支持reset()操作,則拋出IOException異常。

abstract public void close() throws IOException

用處:關(guān)閉該流并釋放與之關(guān)聯(lián)的所有資源。

測試用例

以下是一個使用Reader類讀取文件的測試用例:

測試代碼演示

package com.example.javase.io.reader;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

/**
 * @author bug菌
 * @version 1.0
 * @date 2023/10/19 10:34
 */
public class ReaderTest {

    public static void main(String[] args) throws IOException {
        File file = new File("./template/fileTest.txt");
        Reader reader = new FileReader(file);

        char[] buffer = new char[1024];
        int len;
        while ((len = reader.read(buffer)) != -1) {
            System.out.println(new String(buffer, 0, len));
        }
        reader.close();
    }
}

測試結(jié)果展示

根據(jù)如上測試用例,我們來執(zhí)行下main主函數(shù)進行測試讀取文件的字符數(shù)據(jù),結(jié)果展示如下截圖:

通過控制臺輸出的內(nèi)容與原文本內(nèi)容進行對比,可得該測試用例運用Reader類正常讀取文件內(nèi)容,

代碼解析

如上測試代碼使用了Reader 類從文件中讀取字符數(shù)據(jù)。如下來對該代碼進行步驟解析,以幫助同學們加速理解。

首先,我們先創(chuàng)建一個 File 對象,指定要讀取的文件路徑,然后使用?FileReader?類將該文件讀取到內(nèi)存中,并返回?Reader?對象。然后使用?char[]?數(shù)組作為緩沖區(qū),將數(shù)據(jù)從?Reader?中讀取到緩沖區(qū),并使用?String?類將緩沖區(qū)數(shù)據(jù)轉(zhuǎn)化為字符串輸出到控制臺,直到所有數(shù)據(jù)都被讀取完畢。最后,關(guān)閉 Reader 對象釋放相關(guān)資源。整個讀取過程非常簡單,你們學會了嗎?

全文小結(jié)

本文對Java中的Reader類進行了詳細介紹,包括其簡介、源代碼解析、應(yīng)用場景案例、優(yōu)缺點分析、方法介紹及測試用例。通過本文的學習,我們可以更好地掌握Reader的使用方法,并在開發(fā)中合理使用Reader類。

總結(jié)

Reader類是Java中一個用于讀取字符流的抽象類,它具有讀取文本數(shù)據(jù)、自動處理字符編碼等優(yōu)點,并可通過其子類實現(xiàn)不同的功能。但是,Reader類讀取數(shù)據(jù)的速度較慢,不適合讀取二進制數(shù)據(jù),而且不能隨機訪問文件中的數(shù)據(jù)。在使用Reader類時,要注意使用緩沖區(qū)等方式來提高讀取速度和效率。最后,要注意關(guān)閉資源,避免資源泄漏問題的發(fā)生。

附錄源碼

如上涉及所有源碼均已上傳同步在「Gitee」,提供給同學們一對一參考學習,輔助你更迅速的掌握。

點擊關(guān)注,第一時間了解華為云新鮮技術(shù)~

?文章來源地址http://www.zghlxwxcb.cn/news/detail-711328.html

到了這里,關(guān)于一步步帶你剖析Java中的Reader類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • ChatGPT的前世今生,到如今AI領(lǐng)域的競爭格局,本文帶你一路回看!

    ChatGPT的前世今生,到如今AI領(lǐng)域的競爭格局,本文帶你一路回看!

    ? 73年前,“機器思維”的概念第一次被計算機科學之父艾倫·圖靈(Alan Turing)提出,從此,通過圖靈測試成為了人類在AI領(lǐng)域為之奮斗的里程碑目標。 73年后的今天,在AI歷經(jīng)了數(shù)十年的不斷進化、迭代后,目前為止仍舊沒有任何一款A(yù)I從真正意義上的通過圖靈測試。 而Ch

    2024年02月04日
    瀏覽(23)
  • 帶你一步步實現(xiàn)低代碼開發(fā)平臺——概述、實現(xiàn)模式、整體框架

    帶你一步步實現(xiàn)低代碼開發(fā)平臺——概述、實現(xiàn)模式、整體框架

    低代碼開發(fā)平臺是一種開發(fā)工具,它允許用戶使用圖形界面和少量編碼來創(chuàng)建應(yīng)用程序。這種平臺的目的是加快應(yīng)用程序開發(fā)速度,減少開發(fā)成本和技能門檻。目前,市場上有許多低代碼開發(fā)平臺可供選擇,包括Microsoft Power Apps、OutSystems、Mendix等等。這些平臺提供了各種各樣

    2024年02月09日
    瀏覽(44)
  • Golang 中的 strings 包詳解(二):strings.Reader

    strings.Reader 是一個實現(xiàn)了 io.Reader、io.Writer、io.ByteReader、io.ByteScanner、io.RuneReader 、io.RuneScanner,、io.Seeker?和?io.WriterTo?接口的結(jié)構(gòu)體,用于從字符串中高效讀取數(shù)據(jù)。strings.Reader 可以將一個字符串包裝成一個可讀流,方便地將字符串中的數(shù)據(jù)讀取到應(yīng)用程序中。結(jié)構(gòu)體定義和

    2024年02月09日
    瀏覽(15)
  • Golang 中的 bytes 包詳解(二):bytes.Reader

    Golang 中的 bytes 包是其中一個 IO 操作標準庫,實現(xiàn)了對字節(jié)切片([]byte)的操作,提供了類似于 strings 包的功能。本文先講解一下 bytes 包中的結(jié)構(gòu)體 bytes.Reader。 bytes.Reader 實現(xiàn)了 io.Reader、io.ReaderAt、io.WriterTo、io.Seeker、io.ByteScanner 和 io.RuneScanner接口,提供了從字節(jié)切片中讀取

    2024年02月12日
    瀏覽(17)
  • 帶你一步步實現(xiàn)低代碼開發(fā)平臺——低代碼配置模塊視圖配置功能詳解

    帶你一步步實現(xiàn)低代碼開發(fā)平臺——低代碼配置模塊視圖配置功能詳解

    上一篇介紹了視圖整體設(shè)計(https://blog.csdn.net/seawaving/article/details/130764669),今天重點介紹下具體的視圖配置功能。 根據(jù)用途不同,將視圖進行了分類,建模產(chǎn)生以下類型的視圖 列表視圖 新增視圖 修改視圖 查看視圖 樹視圖 樹表視圖 參照視圖 樹參照視圖 樹表參照視圖 主

    2024年02月06日
    瀏覽(29)
  • 【linux】挖礦病毒nanominer偽裝成python占用服務(wù)器GPU!本文帶你分析并殺毒!

    【linux】挖礦病毒nanominer偽裝成python占用服務(wù)器GPU!本文帶你分析并殺毒!

    可以看到root用戶將GPU的核心跑滿了每個占用都是100%,顯存吃了6G多。 不能正常顯示GPU被哪些進程占用 在/tmp/.x/目錄中 總結(jié): amdmemtweak: 優(yōu)化顯存時序,提高挖礦效能 config.ini: 挖礦配置文件 doos.pid: 挖礦進程的pid號 logs: 挖礦病毒的輸出log nanominer: 3.7.7-linux版本的挖礦病毒,這

    2024年02月14日
    瀏覽(52)
  • 【微信小程序】如何獲得自己當前的定位呢?本文利用逆地址解析、uni-app帶你實現(xiàn)

    【微信小程序】如何獲得自己當前的定位呢?本文利用逆地址解析、uni-app帶你實現(xiàn)

    目錄 前言 效果展示 一、在騰訊定位服務(wù)配置微信小程序JavaScript SDK 二、使用uni-app獲取定位的經(jīng)緯度 三、?逆地址解析,獲取精確定位 四、小提示 在瀏覽器搜索騰訊定位服務(wù),找到官方網(wǎng)站,利用微信或者其他賬號注冊登錄,登錄后如下圖操作 點進去之后,可以看到如下圖

    2024年01月19日
    瀏覽(27)
  • 本文將從云原生的概念、背景知識、Kubernetes架構(gòu)及核心組件、應(yīng)用場景、案例研究等方面深入剖析云原生課程的相關(guān)知識點

    作者:禪與計算機程序設(shè)計藝術(shù) 2020年,技術(shù)快速發(fā)展,云計算火爆。云原生領(lǐng)域也隨之蓬勃發(fā)展。云原生已經(jīng)成為大勢所趨,大量企業(yè)都在逐漸轉(zhuǎn)型云原生應(yīng)用架構(gòu)。國內(nèi)外云服務(wù)廠商也紛紛推出基于Kubernetes的服務(wù)平臺,而Kubernetes又是云原生開源技術(shù)體系的一部分。為了幫

    2024年02月07日
    瀏覽(50)
  • 【JAVA】帶你認識java方法|java中的方法&方法中的重載和遞歸

    【JAVA】帶你認識java方法|java中的方法&方法中的重載和遞歸

    作者主頁: paper jie的博客 本文作者:大家好,我是paper jie,感謝你閱讀本文,歡迎一建三連哦。 本文錄入于《JAVASE語法系列》專欄,本專欄是針對于大學生,編程小白精心打造的。筆者用重金(時間和精力)打造,將javaSE基礎(chǔ)知識一網(wǎng)打盡,希望可以幫到讀者們哦。 其他專欄

    2024年02月14日
    瀏覽(12)
  • 真的不能再詳細了,2W字保姆級帶你一步步用Pytorch搭建卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)MNIST手寫數(shù)字識別

    真的不能再詳細了,2W字保姆級帶你一步步用Pytorch搭建卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)MNIST手寫數(shù)字識別

    目錄 一、引言(環(huán)境) ?二、正文 1. 代碼基本情況介紹 2. MNIST數(shù)據(jù)集介紹?? ? ?? ?3. 代碼輸出結(jié)果介紹 數(shù)據(jù)集取樣: 訓練信息輸出: 前三次訓練成果以及預(yù)測: 八次訓練的結(jié)果: ?4. 代碼拆解講解 基本的參數(shù)設(shè)定 MNIST數(shù)據(jù)集下載、保存與加載 神經(jīng)網(wǎng)絡(luò)模型 訓練前的準

    2023年04月20日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包