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

Java?InputStream實(shí)戰(zhàn)之輕松讀取操作文件流

 更新時(shí)間:2023年10月19日 11:08:13   作者:喵手  
在Java中,輸入輸出是非常重要的基礎(chǔ)功能,其中,InputStream是Java中的一個(gè)重要輸入流類(lèi),用于從輸入源讀取數(shù)據(jù),下面我們就來(lái)學(xué)習(xí)一下InputStream類(lèi)的相關(guān)知識(shí)吧

前言

Java是一門(mén)非常流行的編程語(yǔ)言,廣泛應(yīng)用于各種應(yīng)用程序的開(kāi)發(fā)。在Java中,輸入輸出是非常重要的基礎(chǔ)功能。其中,InputStream是Java中的一個(gè)重要輸入流類(lèi),用于從輸入源讀取數(shù)據(jù)。

摘要

本文將介紹InputStream類(lèi)的源代碼解析、應(yīng)用場(chǎng)景案例、優(yōu)缺點(diǎn)分析、類(lèi)代碼方法介紹以及測(cè)試用例。

InputStream類(lèi)

簡(jiǎn)介

InputStream是Java中的一個(gè)抽象類(lèi),用于從輸入源讀取數(shù)據(jù)。它提供了以下基本方法:

  • int read():從輸入流中讀取一個(gè)字節(jié)的數(shù)據(jù)。如果已經(jīng)到達(dá)輸入流的末尾,則返回-1。
  • int read(byte[] b):從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲(chǔ)在緩沖區(qū)數(shù)組b中。返回實(shí)際讀取的字節(jié)數(shù)。
  • int read(byte[] b, int off, int len):從輸入流中讀取最多l(xiāng)en個(gè)字節(jié),并將其存儲(chǔ)在緩沖區(qū)數(shù)組b中,從偏移量off開(kāi)始存儲(chǔ)。返回實(shí)際讀取的字節(jié)數(shù)。
  • long skip(long n):從輸入流中跳過(guò)并丟棄n個(gè)字節(jié)的數(shù)據(jù),并返回實(shí)際跳過(guò)的字節(jié)數(shù)。
  • int available():返回可從輸入流中讀取的估計(jì)字節(jié)數(shù)。
  • void close():關(guān)閉輸入流并釋放與之相關(guān)的任何系統(tǒng)資源。

InputStream類(lèi)是一個(gè)抽象類(lèi),不能直接實(shí)例化。它有幾個(gè)具體的子類(lèi),如FileInputStream、ByteArrayInputStream、PipedInputStream等。這些子類(lèi)提供了實(shí)際的方法來(lái)從特定類(lèi)型的輸入源中讀取數(shù)據(jù)。

源代碼解析

InputStream類(lèi)的源代碼可以在JDK中找到。以下是該類(lèi)的部分源代碼:

public abstract class InputStream implements Closeable {
    // ...
    
    public abstract int read() throws IOException;
    
    public int read(byte[] b) throws IOException {
        return read(b, 0, b.length);
    }
    
    public int read(byte[] b, int off, int len) throws IOException {
        if (b == null) {
            throw new NullPointerException();
        } else if (off < 0 || len < 0 || len > b.length - off) {
            throw new IndexOutOfBoundsException();
        } else if (len == 0) {
            return 0;
        }
        int c = read();
        if (c == -1) {
            return -1;
        }
        b[off] = (byte) c;
        int i = 1;
        try {
            for (; i < len ; i++) {
                c = read();
                if (c == -1) {
                    break;
                }
                b[off + i] = (byte) c;
            }
        } catch (IOException ee) {
        }
        return i;
    }
    
    // ...
}

從上述代碼中可以看出,InputStream類(lèi)定義了一個(gè)抽象方法read(),用于從輸入流中讀取一個(gè)字節(jié)的數(shù)據(jù)。它還定義了重載的read()方法,用于從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲(chǔ)在緩沖區(qū)數(shù)組中。

在read(byte[] b, int off, int len)方法中,該方法首先檢查參數(shù)是否合法。然后,它從輸入流中讀取第一個(gè)字節(jié),并將其存儲(chǔ)在緩沖區(qū)數(shù)組的偏移量off位置。接下來(lái),該方法從輸入流中讀取len-1個(gè)字節(jié),并將它們存儲(chǔ)在緩沖區(qū)數(shù)組中。最后,該方法返回實(shí)際讀取的字節(jié)數(shù)。

應(yīng)用場(chǎng)景案例

InputStream類(lèi)的應(yīng)用場(chǎng)景非常廣泛。以下是一些典型的應(yīng)用場(chǎng)景:

  • 從文件中讀取數(shù)據(jù)。可以使用FileInputStream類(lèi)來(lái)創(chuàng)建一個(gè)輸入流,然后從該流中讀取數(shù)據(jù)。
  • 從網(wǎng)絡(luò)中讀取數(shù)據(jù)。可以使用Socket類(lèi)來(lái)創(chuàng)建一個(gè)連接,然后從該連接的輸入流中讀取數(shù)據(jù)。
  • 從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)??梢允褂肑DBC API來(lái)執(zhí)行查詢(xún)操作,并從查詢(xún)結(jié)果集的輸入流中讀取數(shù)據(jù)。
  • 從字節(jié)數(shù)組中讀取數(shù)據(jù)??梢允褂肂yteArrayInputStream類(lèi)來(lái)創(chuàng)建一個(gè)輸入流,然后從該流中讀取數(shù)據(jù)。
  • 從管道中讀取數(shù)據(jù)??梢允褂肞ipedInputStream類(lèi)來(lái)創(chuàng)建一個(gè)輸入流,然后從該流中讀取數(shù)據(jù)。

優(yōu)缺點(diǎn)分析

InputStream類(lèi)的主要優(yōu)點(diǎn)是它提供了一套抽象的、統(tǒng)一的輸入流API,使得從不同類(lèi)型的輸入源中讀取數(shù)據(jù)變得非常容易。

該類(lèi)的主要缺點(diǎn)是它是一個(gè)抽象類(lèi),不能直接實(shí)例化。而且,它的具體子類(lèi)需要提供實(shí)際的方法來(lái)從特定類(lèi)型的輸入源中讀取數(shù)據(jù)。這使得InputStream類(lèi)的使用略微有些復(fù)雜。

此外,如果從輸入源讀取的數(shù)據(jù)量很大,InputStream類(lèi)可能會(huì)導(dǎo)致內(nèi)存占用和性能問(wèn)題。

類(lèi)代碼方法介紹

InputStream類(lèi)定義了許多方法,以下是其中一些方法的介紹:

  • int read():從輸入流中讀取一個(gè)字節(jié)的數(shù)據(jù)。如果已經(jīng)到達(dá)輸入流的末尾,則返回-1。
  • int read(byte[] b):從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲(chǔ)在緩沖區(qū)數(shù)組b中。返回實(shí)際讀取的字節(jié)數(shù)。
  • int read(byte[] b, int off, int len):從輸入流中讀取最多l(xiāng)en個(gè)字節(jié),并將其存儲(chǔ)在緩沖區(qū)數(shù)組b中,從偏移量off開(kāi)始存儲(chǔ)。返回實(shí)際讀取的字節(jié)數(shù)。
  • long skip(long n):從輸入流中跳過(guò)并丟棄n個(gè)字節(jié)的數(shù)據(jù),并返回實(shí)際跳過(guò)的字節(jié)數(shù)。
  • int available():返回可從輸入流中讀取的估計(jì)字節(jié)數(shù)。
  • void close():關(guān)閉輸入流并釋放與之相關(guān)的任何系統(tǒng)資源。

測(cè)試用例

以下是一個(gè)簡(jiǎn)單的測(cè)試用例,用于從文件中讀取數(shù)據(jù):

package com.example.javase.io.fileProject;

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

/**
 * @Author 喵手
 * @Date 2023-10-18 22:32
 */
public class InputStreamTest {

    public static void testInputStream_1() throws IOException {
        InputStream in = new FileInputStream("testDoc.txt");
        byte[] buffer = new byte[1024];
        int length = in.read(buffer);
        while (length != -1) {
            System.out.write(buffer, 0, length);
            length = in.read(buffer);
        }
        in.close();
    }

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

以上代碼將打開(kāi)一個(gè)名為testDoc.txt的文件,從中讀取數(shù)據(jù),并將其輸出到控制臺(tái)。

如下是上述案例執(zhí)行結(jié)果:

小結(jié)

InputStream是Java中的一個(gè)重要輸入流類(lèi),用于從輸入源讀取數(shù)據(jù)。它提供了一套抽象的、統(tǒng)一的輸入流API,使得從不同類(lèi)型的輸入源中讀取數(shù)據(jù)變得非常容易。

本文介紹了InputStream類(lèi)的源代碼解析、應(yīng)用場(chǎng)景案例、優(yōu)缺點(diǎn)分析、類(lèi)代碼方法介紹以及測(cè)試用例。希望讀者可以通過(guò)本文深入了解InputStream類(lèi)的相關(guān)知識(shí),并在實(shí)際開(kāi)發(fā)中熟練應(yīng)用。

總結(jié)

本文對(duì)Java中的InputStream類(lèi)進(jìn)行了詳細(xì)介紹。InputStream類(lèi)是Java中的一個(gè)抽象類(lèi),用于從輸入源讀取數(shù)據(jù)。它提供了一套抽象的、統(tǒng)一的輸入流API,使得從不同類(lèi)型的輸入源中讀取數(shù)據(jù)變得非常容易。該類(lèi)的具體子類(lèi)需要提供實(shí)際的方法來(lái)從特定類(lèi)型的輸入源中讀取數(shù)據(jù)。

在本文中,我們首先對(duì)InputStream類(lèi)的源代碼進(jìn)行了解析,重點(diǎn)介紹了read()和read(byte[] b, int off, int len)方法的實(shí)現(xiàn)。接著我們介紹了InputStream的應(yīng)用場(chǎng)景,包括從文件、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)、字節(jié)數(shù)組和管道中讀取數(shù)據(jù)等。我們還分析了該類(lèi)的優(yōu)缺點(diǎn),指出它的主要優(yōu)點(diǎn)是提供了統(tǒng)一的輸入流API,而缺點(diǎn)在于使用略微有些復(fù)雜,且可能導(dǎo)致內(nèi)存占用和性能問(wèn)題。

到此這篇關(guān)于Java InputStream實(shí)戰(zhàn)之輕松讀取操作文件流的文章就介紹到這了,更多相關(guān)Java InputStream內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • maven?setting.xml文件配置禪定之旅

    maven?setting.xml文件配置禪定之旅

    這篇文章主要為大家介紹了maven?setting.xml文件禪定之旅,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java?CompletableFuture實(shí)現(xiàn)多線(xiàn)程異步編排

    Java?CompletableFuture實(shí)現(xiàn)多線(xiàn)程異步編排

    這篇文章主要為大家介紹了Java?CompletableFuture實(shí)現(xiàn)多線(xiàn)程異步編排,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • java創(chuàng)建簡(jiǎn)易視頻播放器

    java創(chuàng)建簡(jiǎn)易視頻播放器

    這篇文章主要為大家詳細(xì)介紹了java創(chuàng)建簡(jiǎn)易視頻播放器的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Spring事務(wù)管理零基礎(chǔ)入門(mén)

    Spring事務(wù)管理零基礎(chǔ)入門(mén)

    事務(wù)的作用就是為了保證用戶(hù)的每一個(gè)操作都是可靠的,事務(wù)中的每一步操作都必須成功執(zhí)行,只要有發(fā)生異常就?回退到事務(wù)開(kāi)始未進(jìn)行操作的狀態(tài)。事務(wù)管理是Spring框架中最為常用的功能之一,我們?cè)谑褂肧pring?Boot開(kāi)發(fā)應(yīng)用時(shí),大部分情況下也都需要使用事務(wù)
    2022-10-10
  • Spring Security OAuth 個(gè)性化token的使用

    Spring Security OAuth 個(gè)性化token的使用

    這篇文章主要介紹了Spring Security OAuth 個(gè)性化token的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 淺談在springboot中使用定時(shí)任務(wù)的方式

    淺談在springboot中使用定時(shí)任務(wù)的方式

    今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著在springboot中使用定時(shí)任務(wù)的方式展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java框架之Maven SSM集合

    Java框架之Maven SSM集合

    本篇文章主要介紹了基于maven的ssm框架整合的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09
  • Java中的線(xiàn)程生命周期核心概念

    Java中的線(xiàn)程生命周期核心概念

    這篇文章主要介紹了Java中的線(xiàn)程生命周期核心概念,通過(guò)使用一個(gè)快速的圖解展開(kāi)文章內(nèi)容,需要的小伙伴可以參考一下
    2022-06-06
  • 詳解Java中的反射機(jī)制和動(dòng)態(tài)代理

    詳解Java中的反射機(jī)制和動(dòng)態(tài)代理

    本文將詳細(xì)介紹反射機(jī)制以及動(dòng)態(tài)代理機(jī)制,而且基本現(xiàn)在的主流框架都應(yīng)用了反射機(jī)制,如spring、MyBatis、Hibernate等等,這就有非常重要的學(xué)習(xí)意義
    2021-06-06
  • Java8 Lambda和Invokedynamic詳情

    Java8 Lambda和Invokedynamic詳情

    關(guān)于Java8的Lambda 我們可以將lambda表達(dá)式與新的Streams API結(jié)合起來(lái),以表達(dá)豐富的數(shù)據(jù)處理查詢(xún),下面文章小編就列舉簡(jiǎn)單的例子給大家介說(shuō)吧,感興趣的小伙伴可以參考下面文章的具體內(nèi)容奧
    2021-09-09

最新評(píng)論