🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Java `ByteArrayInputStream`类 > 原文: [https://www.programiz.com/java-programming/bytearrayinputstream](https://www.programiz.com/java-programming/bytearrayinputstream) #### 在本教程中,我们将借助示例学习 Java `ByteArrayInputStream`及其方法。 `java.io`包的`ByteArrayInputStream`类可用于读取输入数据数组(以字节为单位)。 它扩展了`InputStream`抽象类。 ![The ByteArrayInputStream is a subclass of the Java InputStream.](https://img.kancloud.cn/4b/d0/4bd0266e239268d18589d9100f23999c_516x372.png "Java ByteArrayInputStream Class") **注意**:在`ByteArrayInputStream`中,使用字节数组创建输入流。 它包括一个内部数组,用于存储该特定字节数组的数据。 * * * ## 创建一个`ByteArrayInputStream` 为了创建字节数组输入流,我们必须首先导入`java.io.ByteArrayInputStream`包。 导入包后,就可以创建输入流。 ```java // Creates a ByteArrayInputStream that reads entire array ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr); ``` 在这里,我们创建了一个输入流,该输入流从`arr`数组读取整个数据。 但是,我们也可以创建仅从数组读取一些数据的输入流。 ```java // Creates a ByteArrayInputStream that reads a portion of array ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr, int start, int length); ``` 此处,输入流从`start`位置开始,从数组中读取等于`length`的字节数。 * * * ## `ByteArrayInputStream`的方法 `ByteArrayInputStream`类提供了`InputStream`类中存在的不同方法的实现。 ### `read()`方法 * `read()` - 从输入流中存在的数组中读取单个字节 * `read(byte[] array)` - 从输入流中读取字节并将其存储在指定的数组中 * `read(byte[] array, int start, int length)` - 从流中读取等于`length`的字节数,并从位置`start`开始存储在指定的数组中 ### 示例:`ByteArrayInputStream`读取数据 ```java import java.io.ByteArrayInputStream; public class Main { public static void main(String[] args) { // Creates an array of byte byte[] array = {1, 2, 3, 4}; try { ByteArrayInputStream input = new ByteArrayInputStream(array); System.out.print("The bytes read from the input stream: "); for(int i= 0; i < array.length; i++) { // Reads the bytes int data = input.read(); System.out.print(data + ", "); } input.close(); } catch(Exception e) { e.getStackTrace(); } } } ``` **输出** ```java The bytes read from the input stream: 1, 2, 3, 4, ``` 在上面的示例中,我们创建了一个名为`input`的字节数组输入流。 ```java ByteArrayInputStream input = new ByteArrayInputStream(array); ``` 在此,输入流包括来自指定数组的所有数据。 为了从输入流中读取数据,我们使用了`read()`方法。 * * * ### `available()`方法 要获取输入流中可用字节的数量,我们可以使用`available()`方法。 例如, ```java import java.io.ByteArrayInputStream; public class Main { public static void main(String args[]) { // Creates an array of bytes byte[] array = { 1, 2, 3, 4 }; try { ByteArrayInputStream input = new ByteArrayInputStream(array); // Returns the available number of bytes System.out.println("Available bytes at the beginning: " + input.available()); // Reads 2 bytes from the input stream input.read(); input.read(); // Returns the available number of bytes System.out.println("Available bytes at the end: " + input.available()); input.close(); } catch (Exception e) { e.getStackTrace(); } } } ``` **输出**: ```java Available bytes at the beginning: 4 Available bytes at the end: 2 ``` 在上面的示例中, 1. 我们已经使用`available()`方法检查输入流中的可用字节数。 2. 然后,我们使用`read()`方法 2 次,从输入流中读取 2 个字节。 3. 现在,在读取 2 个字节后,我们检查了可用字节。 这次,可用字节减少了 2。 * * * ### `skip()`方法 要丢弃并跳过指定的字节数,可以使用`skip()`方法。 例如, ```java import java.io.ByteArrayInputStream; public class Main { public static void main(String args[]) { // Create an array of bytes byte[] array = { 1, 2, 3, 4 }; try { ByteArrayInputStream input = new ByteArrayInputStream(array); // Using the skip() method input.skip(2); System.out.print("Input stream after skipping 2 bytes: "); int data = input.read(); while (data != -1) { System.out.print(data + ", "); data = input.read(); } // close() method input.close(); } catch (Exception e) { e.getStackTrace(); } } } ``` **输出**: ```java Input stream after skipping 2 bytes: 3, 4, ``` 在上面的示例中,我们使用`skip()`方法从输入流中跳过 2 个字节的数据。 因此,不会从输入流中读取`1`和`2`。 * * * ### `close()`方法 要关闭输入流,可以使用`close()`方法。 但是,`close()`方法在`ByteArrayInputStream`类中无效。 即使调用了`close()`方法,我们也可以使用此类的方法。 * * * ## `ByteArrayInputStream`的其他方法 | 方法 | 内容描述 | | --- | --- | | `finalize()` | 确保调用`close()`方法 | | `mark()` | 标记输入流中已读取数据的位置 | | `reset()` | 将控件返回到输入流中设置了标记的点 | | `markSupported()` | 检查输入流是否支持`mark()`和`reset()` | 要了解更多信息,请访问 [Java `ByteArrayInputStream`(Java 官方文档)](https://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayInputStream.html "Java ByteArrayInputStream (official Java documentation)")。