四,字节流

bjynjj / 2024-11-08 / 原文

Java字节流详解及应用

在Java中,字节流是处理二进制数据的基础,它们可以处理任何类型的数据,因此被称为“万能流”。字节流按照流向划分为字节输入流和字节输出流,按照数据类型划分为字节流和字符流。本文将详细介绍字节流的使用方法,包括构造方法、写数据的方法以及如何实现文件内容的追加写和换行。

字节流概述

按照流向划分

  • 输入流:外部数据 -> Java程序
  • 输出流:Java程序 -> 外部数据

按照数据类型划分

  • 字节流:处理二进制数据,适用于所有类型的数据。
    • 字节输出流
      • OutputStream(抽象类)
        • FileOutputStream(实现子类)
    • 字节输入流
      • InputStream(抽象类)
        • FileInputStream(实现子类)

FileOutputStream

FileOutputStream是字节输出流的一个实现类,用于将数据写入文件。

构造方法

// 使用文件对象创建FileOutputStream
File file = new File("example.txt");
try (FileOutputStream fos = new FileOutputStream(file)) {
    // 写入数据的代码
} catch (IOException e) {
    e.printStackTrace();
}

// 使用文件名创建FileOutputStream
try (FileOutputStream fos = new FileOutputStream("example.txt")) {
    // 写入数据的代码
} catch (IOException e) {
    e.printStackTrace();
}

写数据的方法

// 写一个字节
fos.write(65); // 写入字符'A'

// 写入字节数组
byte[] data = {66, 67, 68}; // 字符'B', 'C', 'D'
fos.write(data);

// 写入字节数组的一部分
fos.write(data, 1, 2); // 从索引1开始写入2个字节,即'C', 'D'

实现文件内容追加写

// 使用带append参数的构造方法
try (FileOutputStream fos = new FileOutputStream("example.txt", true)) {
    fos.write(69); // 写入字符'E',追加到文件末尾
} catch (IOException e) {
    e.printStackTrace();
}

实现写的时候换行

// 写入换行符
fos.write(10); // 换行符的ASCII码是10

FileInputStream

FileInputStream是字节输入流的一个实现类,用于从文件读取数据。

构造方法

// 使用文件对象创建FileInputStream
File file = new File("example.txt");
try (FileInputStream fis = new FileInputStream(file)) {
    // 读取数据的代码
} catch (IOException e) {
    e.printStackTrace();
}

// 使用文件名创建FileInputStream
try (FileInputStream fis = new FileInputStream("example.txt")) {
    // 读取数据的代码
} catch (IOException e) {
    e.printStackTrace();
}

读取数据的方法

// 读取一个字节
int byteRead = fis.read();

// 读取字节数组
byte[] buffer = new byte[1024];
int bytesRead = fis.read(buffer);
// 将读取的字节转换为字符串
String content = new String(buffer, 0, bytesRead);
System.out.println(content);

使用字节输入流读取汉字

由于FileInputStream是字节流,它读取的是文件的原始字节数据。如果文件中包含汉字,读取时需要考虑编码问题。通常,文件的编码和系统的默认编码应该匹配。

try (FileInputStream fis = new FileInputStream("example.txt")) {
    byte[] buffer = new byte[1024];
    int bytesRead = fis.read(buffer);
    // 将读取的字节转换为字符串
    String content = new String(buffer, 0, bytesRead, StandardCharsets.UTF_8);
    System.out.println(content);
} catch (IOException e) {
    e.printStackTrace();
}

结论

字节流是Java中处理二进制数据的基本工具,适用于所有类型的数据。通过FileOutputStreamFileInputStream,我们可以轻松地将数据写入文件和从文件读取数据。在实际编程中,合理使用字节流可以大大提高程序的数据处理能力。通过上述示例和解释,你应该能够更好地理解和应用字节流。