Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊(duì)列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java ByteArrayInputStream 類

在本教程中,我們將借助示例學(xué)習(xí)Java ByteArrayInputStream及其方法。

java.io包的ByteArrayInputStream類可用于讀取輸入數(shù)據(jù)數(shù)組(以字節(jié)為單位)。

它繼承了InputStream抽象類。

ByteArrayInputStream是Java InputStream的子類。

注意:在ByteArrayInputStream中,使用字節(jié)數(shù)組創(chuàng)建輸入流。 它包括一個(gè)內(nèi)部數(shù)組,用于存儲(chǔ)該特定字節(jié)數(shù)組的數(shù)據(jù)。

創(chuàng)建一個(gè)ByteArrayInputStream

為了創(chuàng)建字節(jié)數(shù)組輸入流,我們必須首先導(dǎo)入java.io.ByteArrayInputStream包。導(dǎo)入包后,就可以創(chuàng)建輸入流。

//創(chuàng)建一個(gè)ByteArrayInputStream來(lái)讀取整個(gè)數(shù)組
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr);

在這里,我們創(chuàng)建了一個(gè)輸入流,該輸入流從arr數(shù)組中讀取整個(gè)數(shù)據(jù)。但是,我們也可以創(chuàng)建僅從數(shù)組讀取一些數(shù)據(jù)的輸入流。

//創(chuàng)建一個(gè)ByteArrayInputStream來(lái)讀取數(shù)組的一部分
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr, int start, int length);

在這里,輸入流從數(shù)組的start位置開始讀取等于數(shù)組length的字節(jié)數(shù)。

ByteArrayInputStream的方法

ByteArrayInputStream類為InputStream類中提供的不同方法提供實(shí)現(xiàn)。

read()方法

  • read()  - 從輸入流中存在的數(shù)組中讀取單個(gè)字節(jié)

  • read(byte[] array)  - 從輸入流中讀取字節(jié)并存儲(chǔ)在指定的數(shù)組中

  • read(byte[] array, int start, int length) - 從流中讀取等于length的字節(jié)數(shù),并從位置start開始存儲(chǔ)在指定的數(shù)組中

示例:ByteArrayInputStream讀取數(shù)據(jù)

import java.io.ByteArrayInputStream;

public class Main {
  public static void main(String[] args) {

    //創(chuàng)建一個(gè)字節(jié)數(shù)組
    byte[] array = {1, 2, 3, 4};

    try {
      ByteArrayInputStream input = new ByteArrayInputStream(array);

      System.out.print("從輸入流讀取的字節(jié): ");

      for(int i= 0; i < array.length; i++) {

        //讀取字節(jié)
        int data = input.read();
        System.out.print(data + ", ");
      }
      input.close();
    }

    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

輸出結(jié)果

從輸入流讀取的字節(jié): 1, 2, 3, 4,

在上面的示例中,我們創(chuàng)建了一個(gè)名為input的字節(jié)數(shù)組輸入流。

ByteArrayInputStream input = new ByteArrayInputStream(array);

在此,輸入流包括來(lái)自指定數(shù)組的所有數(shù)據(jù)。為了從輸入流中讀取數(shù)據(jù),我們使用了read()方法。

available()方法

要獲取輸入流中可用字節(jié)的數(shù)量,我們可以使用available()方法。例如,

import java.io.ByteArrayInputStream;

public class Main {

  public static void main(String args[]) {

    //創(chuàng)建字節(jié)數(shù)組
    byte[] array = { 1, 2, 3, 4 };

    try {
      ByteArrayInputStream input = new ByteArrayInputStream(array);

      //返回可用的字節(jié)數(shù)
      System.out.println("開始時(shí)的可用字節(jié)數(shù): " + input.available());

      //從輸入流中讀取兩個(gè)字節(jié)
      input.read();
      input.read();

      //返回可用的字節(jié)數(shù)
      System.out.println("結(jié)束時(shí)的可用字節(jié)數(shù): " + input.available());

      input.close();
    }

    catch (Exception e) {
      e.getStackTrace();
    }
  }
}

輸出結(jié)果

開始的可用字節(jié)數(shù): 4
結(jié)束時(shí)的可用字節(jié)數(shù): 2

在以上示例中,

  1. 我們已經(jīng)使用該available()方法檢查輸入流中可用字節(jié)的數(shù)量。

  2. 然后,我們使用該read()方法2次從輸入流中讀取2個(gè)字節(jié)。

  3. 現(xiàn)在,在讀取2個(gè)字節(jié)之后,我們檢查了可用字節(jié)。這次,可用字節(jié)減少了2。

skip()方法

要丟棄和跳過(guò)指定的字節(jié)數(shù),可以使用skip()方法。例如

import java.io.ByteArrayInputStream;

public class Main {

  public static void main(String args[]) {

    //創(chuàng)建一個(gè)字節(jié)數(shù)組
    byte[] array = { 1, 2, 3, 4 };
    try {
      ByteArrayInputStream input = new ByteArrayInputStream(array);

      //使用skip()方法
      input.skip(2);
      System.out.print("跳過(guò)2個(gè)字節(jié)后的輸入流: ");

      int data = input.read();
      while (data != -1) {
        System.out.print(data + ", ");
        data = input.read();
      }

      // close() 方法
      input.close();
    }

    catch (Exception e) {
      e.getStackTrace();
    }
  }
}

輸出結(jié)果

跳過(guò)2個(gè)字節(jié)后的輸入流: 3, 4,

在上面的示例中,我們使用skip()方法跳過(guò)輸入流中的2字節(jié)數(shù)據(jù)。因此,不會(huì)從輸入流中讀取1和2。

close()方法

要關(guān)閉輸入流,可以使用close()方法。

但是,close()方法在ByteArrayInputStream類中不起作用。即使在close()方法被調(diào)用之后,我們也可以使用該類的方法。

ByteArrayInputStream的其他方法

方法內(nèi)容描述
finalize()確保close()方法被調(diào)用
mark()標(biāo)記輸入流中已讀取數(shù)據(jù)的位置
reset()將控件返回到輸入流中設(shè)置了標(biāo)記的點(diǎn)
markSupported()檢查輸入流是否支持mark()和reset()
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清