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

Java利用InputStream類實現(xiàn)文件讀取與處理

 更新時間:2023年11月08日 08:35:19   作者:喵手  
在Java開發(fā)中,輸入流(InputStream)是一個非常重要的概念,它涉及到文件讀寫、網(wǎng)絡(luò)傳輸?shù)榷鄠€方面,InputStream類是Java中輸入流的抽象基類,定義了讀取輸入流數(shù)據(jù)的方法,本文將以InputStream類為切入點,介紹Java中的輸入流概念及其應(yīng)用,需要的朋友可以參考下

今天我要給大家分享一些自己日常學(xué)習(xí)到的一些知識點,并以文字的形式跟大家一起交流,互相學(xué)習(xí),一個人雖可以走的更快,但一群人可以走的更遠(yuǎn)。

我是一名后端開發(fā)愛好者,工作日常接觸到最多的就是Java語言啦,所以我都盡量抽業(yè)余時間把自己所學(xué)到所會的,通過文章的形式進(jìn)行輸出,希望以這種方式幫助到更多的初學(xué)者或者想入門的小伙伴們,同時也能對自己的技術(shù)進(jìn)行沉淀,加以復(fù)盤,查缺補(bǔ)漏。

摘要

InputSteam類是Java中輸入流的抽象基類。InputStream類及其子類可以從不同的輸入源中讀取數(shù)據(jù),如文件、網(wǎng)絡(luò)、字節(jié)數(shù)組等。InputStream類提供了多個讀取數(shù)據(jù)的方法,可以讀取字節(jié)、字符、數(shù)組等不同類型的數(shù)據(jù)。InputStream類的常用子類有FileInputStream、ByteArrayInputStream等。

本文將深入解析InputStream類的源代碼實現(xiàn),并結(jié)合實際應(yīng)用場景進(jìn)行案例說明。同時,我們還將分析InputStream類的優(yōu)缺點,以及類方法的具體介紹和測試用例。

InputStream類

簡介

InputStream類是Java中所有輸入流的父類,它是一個抽象類。InputStream類提供了讀取不同類型數(shù)據(jù)的方法,如read()、read(byte[] b)、read(byte[] b, int off, int len)等,這些方法可以讀取字節(jié)、字符、數(shù)組等不同類型的數(shù)據(jù)。InputStream類的常用子類有FileInputStream、ByteArrayInputStream等。

下面是InputStream類的定義:

public abstract class InputStream implements Closeable {
    //...
}

InputStream類定義了一個Closeable接口,該接口表示此輸入流已經(jīng)完成輸入操作,并且可以關(guān)閉此流。InputStream類的子類需要實現(xiàn)這個方法。

源代碼解析

InputStream類是Java中所有輸入流的父類,提供了讀取不同類型數(shù)據(jù)的方法。在InputStream類中,最重要的方法是read()方法。

read()方法可以讀取一個字節(jié)的數(shù)據(jù),并返回該字節(jié)的值。它的定義如下:

public abstract int read() throws IOException;

該方法會從輸入流中讀取一個字節(jié)的數(shù)據(jù),并將該字節(jié)的值返回。如果已經(jīng)到達(dá)輸入流的末尾,則返回-1。此方法可能會阻塞,直到輸入數(shù)據(jù)可用、檢測到文件結(jié)束或拋出異常為止。

在InputStream類中,還有另外兩個重要的方法,分別是read(byte[] b)和read(byte[] b, int off, int len)。其中,read(byte[] b)方法可以一次讀取多個字節(jié)的數(shù)據(jù),并將讀取的字節(jié)數(shù)據(jù)存儲到指定的字節(jié)數(shù)組中,而read(byte[] b, int off, int len)方法則可以讀取指定長度的字節(jié)數(shù)據(jù),并存儲到指定的字節(jié)數(shù)組中。

InputStream類還提供了mark(int readlimit)、reset()、available()等方法。其中,mark(int readlimit)方法允許輸入流在某個位置設(shè)置一個標(biāo)記,以便后續(xù)調(diào)用reset()方法時,輸入流可以回到該標(biāo)記處重新讀取數(shù)據(jù)。而reset()方法可以將輸入流指針重新設(shè)置到最近的標(biāo)記處。available()方法可以返回當(dāng)前可用的字節(jié)數(shù)。

如下是部分源碼截圖:

應(yīng)用場景案例

在Java中,InputStream類及其子類可以從不同的輸入源中讀取數(shù)據(jù),如文件、網(wǎng)絡(luò)、字節(jié)數(shù)組等。下面是一個小例子,演示如何從文件中讀取數(shù)據(jù):

import java.io.FileInputStream;
import java.io.InputStream;

public class InputStreamTest {
    public static void main(String[] args) throws Exception {
        InputStream input = new FileInputStream("test.txt");
        int data = input.read();
        while(data != -1){
            System.out.println((char) data);
            data = input.read();
        }
        input.close();
    }
}

在上述代碼中,我們首先通過FileInputStream類打開一個文件輸入流,接著使用InputStream類中的read()方法讀取文件數(shù)據(jù),并將每個字節(jié)轉(zhuǎn)化為字符輸出。最后,我們需要記得關(guān)閉輸入流,以釋放資源。

除了文件輸入流,我們還可以使用ByteArrayInputStream類從字節(jié)數(shù)組中讀取數(shù)據(jù)。下面是一個示例代碼:

import java.io.ByteArrayInputStream;
import java.io.InputStream;

public class ByteArrayInputStreamTest {
    public static void main(String[] args) throws Exception {
        byte[] data = "Hello World".getBytes();
        InputStream input = new ByteArrayInputStream(data);
        int ch = input.read();
        while(ch != -1){
            System.out.println((char) ch);
            ch = input.read();
        }
        input.close();
    }
}

在上述代碼中,我們使用ByteArrayInputStream類從一個字節(jié)數(shù)組中讀取數(shù)據(jù),然后將每個字節(jié)轉(zhuǎn)化為字符輸出。最后需要記得關(guān)閉輸入流。

優(yōu)缺點分析

InputStream類的優(yōu)點在于它是一個抽象類,提供了讀取不同類型數(shù)據(jù)的方法,可以從不同輸入源讀取數(shù)據(jù)。此外,InputStream類提供了mark()、reset()等方法,使得輸入流可以重復(fù)讀取數(shù)據(jù)。

然而,InputStream類本身并不能直接使用,需要使用它的子類,如FileInputStream、ByteArrayInputStream等。這些子類需要根據(jù)不同的輸入源進(jìn)行實例化,使代碼更加復(fù)雜。

類代碼方法介紹

在InputStream類中,最常用的方法是read()、read(byte[] b)和read(byte[] b, int off, int len)方法。下面是它們的詳細(xì)介紹:

  • read()方法:讀取一個字節(jié)的數(shù)據(jù),并返回該字節(jié)的值。如果已經(jīng)到達(dá)輸入流的末尾,則返回-1。此方法可能會阻塞,直到輸入數(shù)據(jù)可用、檢測到文件結(jié)束或拋出異常為止。
  • read(byte[] b)方法:一次讀取多個字節(jié)的數(shù)據(jù),并將讀取的字節(jié)數(shù)據(jù)存儲到指定的字節(jié)數(shù)組中。返回值為實際讀取的字節(jié)數(shù)。如果已經(jīng)到達(dá)輸入流的末尾,則返回-1。
  • read(byte[] b, int off, int len)方法:讀取指定長度的字節(jié)數(shù)據(jù),并存儲到指定的字節(jié)數(shù)組中。返回值為實際讀取的字節(jié)數(shù)。如果已經(jīng)到達(dá)輸入流的末尾,則返回-1。

此外,InputStream類還提供了mark(int readlimit)、reset()、available()等方法。其中,mark(int readlimit)方法允許輸入流在某個位置設(shè)置一個標(biāo)記,以便后續(xù)調(diào)用reset()方法時,輸入流可以回到該標(biāo)記處重新讀取數(shù)據(jù)。而reset()方法可以將輸入流指針重新設(shè)置到最近的標(biāo)記處。available()方法可以返回當(dāng)前可用的字節(jié)數(shù)。

測試用例

下面是一個簡單的測試用例,用來測試InputStream類讀取文件數(shù)據(jù)的功能:

package com.example.javase.se.classes;

import java.io.FileInputStream;
import java.io.InputStream;

/**
 * @Author ms
 * @Date 2023-11-04 18:17
 */
public class InputStreamTest {

    public static void main(String[] args) throws Exception {
        InputStream input = new FileInputStream("test.txt");
        int data = input.read();
        while (data != -1) {
            System.out.println((char) data);
            data = input.read();
        }
        input.close();
    }
}

在上述代碼中,我們首先使用FileInputStream類打開一個文件輸入流,然后使用InputStream類中的read()方法讀取文件數(shù)據(jù),并將每個字節(jié)轉(zhuǎn)化為字符輸出。最終,我們需要記得關(guān)閉輸入流,以釋放資源。

測試結(jié)果

根據(jù)如上測試用例,本地測試結(jié)果如下,僅供參考,你們也可以自行修改測試用例或者添加更多的測試數(shù)據(jù)或測試方法,進(jìn)行熟練學(xué)習(xí)以此加深理解。

測試代碼分析

根據(jù)如上測試用例,在此我給大家進(jìn)行深入詳細(xì)的解讀一下測試代碼,以便于更多的同學(xué)能夠理解并加深印象。

這段代碼演示了如何使用Java的輸入流來讀取一個文件的內(nèi)容并在控制臺輸出。具體步驟如下:

  • 首先創(chuàng)建一個InputStream對象,通過FileInputStream指定要讀取的文件路徑并傳入構(gòu)造函數(shù)中。

  • 調(diào)用InputStream對象的read()方法讀取文件的內(nèi)容。每次調(diào)用read()方法都會讀取一個字節(jié),并返回其對應(yīng)的ASCII碼值。

  • 使用while循環(huán)不斷地讀取文件,當(dāng)讀取到文件末尾時,read()方法會返回-1。

  • 將每個字節(jié)的ASCII碼值轉(zhuǎn)換成對應(yīng)的字符,并在控制臺上輸出。

  • 最后關(guān)閉InputStream對象,釋放資源。

需要注意的是,在使用輸入流讀取文件時,需要處理異常,因此代碼中使用了throws Exception來拋出可能的異常。另外,還應(yīng)該在讀取文件后關(guān)閉輸入流,以免造成資源浪費或文件被占用的情況。

全文小結(jié)

本文以Java中InputStream類為切入點,介紹了Java中的輸入流概念及其應(yīng)用。我們深入解析了InputStream類的源代碼實現(xiàn),并結(jié)合實際應(yīng)用場景進(jìn)行案例說明。同時,我們分析了InputStream類的優(yōu)缺點,以及類方法的具體介紹和測試用例。

InputStream類是Java中所有輸入流的父類,提供了讀取不同類型數(shù)據(jù)的方法。InputStream類的常用子類有FileInputStream、ByteArrayInputStream等。在Java開發(fā)中,InputStream類的應(yīng)用涉及到文件讀寫、網(wǎng)絡(luò)傳輸?shù)榷鄠€方面。

總結(jié)

本文介紹了Java中的輸入流概念及其應(yīng)用,以InputStream類為切入點,深入解析了該類的源代碼實現(xiàn),并結(jié)合實際應(yīng)用場景進(jìn)行案例說明。同時,文章分析了InputStream類的優(yōu)缺點,以及類方法的具體介紹和測試用例。InputStream類是Java中所有輸入流的父類,提供了讀取不同類型數(shù)據(jù)的方法,并且常用的子類有FileInputStream、ByteArrayInputStream等。在Java開發(fā)中,InputStream類的應(yīng)用涉及到文件讀寫、網(wǎng)絡(luò)傳輸?shù)榷鄠€方面。該篇文章對Java開發(fā)的初學(xué)者和愛好者都有一定的參考價值。

以上就是Java利用InputStream類實現(xiàn)文件讀取與處理的詳細(xì)內(nèi)容,更多關(guān)于Java InputStream文件讀取與處理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論