返回

字节流:Java 中原始数据操作的基础

Android

Java 基础(十):字节流

引言:

在上一篇文章中,我们深入探讨了字符流在 Java 中的基本操作。通过仔细检查源代码,我们发现字符流实际上是以字节流为基础实现的,每次读取两个字节来形成一个字符。

什么是字节流?

字节流,顾名思义,是一系列有序的字节。它们是 Java I/O API 的基础,用于处理原始字节数据。与字符流不同,字节流不会对数据进行任何解释或转换。

InputStream 和 OutputStream

InputStream 和 OutputStream 是 Java 中字节流操作的两个核心抽象类。

  • InputStream: 表示一个字节输入流。它提供了一个方法 read() 来读取下一个字节,或 read(byte[] b) 来读取多个字节到一个字节数组中。
  • OutputStream: 表示一个字节输出流。它提供了一个方法 write(byte b) 来写入一个字节,或 write(byte[] b) 来写入多个字节。

字节流的类型

根据它们的底层实现,字节流可以分为两種類型:

  • 文件字节流: 用于读取和写入文件中的字节数据。最常见的实现是 FileInputStream 和 FileOutputStream。
  • 管道字节流: 用于在进程之间或组件之间传递字节数据。它们通常与管道或套接字一起使用。

字节流操作

字节流的基本操作包括:

  • 读取: 使用 read() 或 read(byte[] b) 从字节流中读取字节。
  • 写入: 使用 write(byte b) 或 write(byte[] b) 将字节写入字节流。
  • 关闭: 使用 close() 方法关闭字节流,释放系统资源。

示例代码:

让我们通过一个简单的示例来演示如何使用字节流读取和写入文件:

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class ByteStreamExample {

    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("input.txt");
             FileOutputStream fos = new FileOutputStream("output.txt")) {
            int b;
            while ((b = fis.read()) != -1) {
                fos.write(b);
            }
            System.out.println("File copied successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述示例中,我们使用 FileInputStream 从 input.txt 文件中读取字节。然后,我们使用 FileOutputStream 将这些字节写入 output.txt 文件。

结论:

字节流是 Java I/O API 的基石。它们用于处理原始字节数据,并提供一系列用于读取、写入和操作字节流的基本操作。了解字节流对于理解 Java 中的 I/O 操作至关重要。