Java 字节流——高效处理二进制数据


前言

字节流是 Java I/O 系统的一部分,专门用于处理字节数据。由于所有数据在计算机中最终都以字节形式存在,这意味着字节流可以操作任何类型的数据,包括文本、图片、视频等。

Java 提供了多种字节流类,这些类继承自 InputStreamOutputStream 类。以下是一些常用的字节流类:

1.InputStream:字节输入流的抽象类,所有字节输入流都继承自此类。

  • FileInputStream:用于从文件中读取字节流。
  • ByteArrayInputStream:从字节数组中读取数据。
  • BufferedInputStream:为其他输入流提供缓冲功能,提高读取效率。
  • DataInputStream:用于读取基本数据类型(如 int、float 等)的输入流。

2.OutputStream:字节输出流的抽象类,所有字节输出流都继承自此类。

  • FileOutputStream:用于将字节流写入文件。
  • ByteArrayOutputStream:将数据写入字节数组。
  • BufferedOutputStream:为其他输出流提供缓冲功能,提高写入效率。
  • DataOutputStream:用于向输出流写入基本数据类型。

一、FileInputStream和FileOutStream

FileInputStreamFileOutputStream 是 Java 中用于处理文件的字节流类。它们分别从文件读取和向文件写入原始字节数据。

1.FileInputStream

常用构造函数

  • FileInputStream(String name):根据指定的文件名创建一个文件输入流。
  • FileInputStream(File file):根据指定的 File 对象创建一个文件输入流。

常用方法

  • int read():读取一个字节的数据,并返回一个整数(0~255),如果到达文件末尾则返回 -1。
  • int read(byte[] b):读取多个字节到字节数组中,返回实际读取的字节数。
  • void close():关闭输入流,释放与之相关的所有系统资源。
public static void main(String[] args) {
    try {
        java.io.FileInputStream fis = new java.io.FileInputStream("fileName.txt");
        int byteData;
        while((byteData = fis.read())!= -1){
            // 将字节转化为字符
            System.out.println((char) byteData);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2.FileOutStream

常用构造函数

  • FileOutputStream(String name):根据指定的文件名创建一个文件输出流。
  • FileOutputStream(File file):根据指定的 File 对象创建一个文件输出流。
  • FileOutputStream(String name, boolean append):如果 append 为 true,则在文件末尾追加内容;如果为 false,则覆盖原文件。

常用方法

  • void write(int b):将指定的字节写入文件。
  • void write(byte[] b):将字节数组中的所有字节写入文件。
  • void close():关闭输出流,释放与之相关的所有系统资源。
public static void main(String[] args) {
    try {
        java.io.FileOutputStream fos = new java.io.FileOutputStream("fileName.txt");
        String content = "Hello World";
        fos.write(content.getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

二、BufferedInputStream和BufferedOutputStream

BufferedInputStreamBufferedOutputStream 是 Java 中用于处理输入和输出流的缓冲流类,它们主要用于提高读写效率,减少对底层设备的直接访问次数。

1.BufferedInputStream

BufferedInputStream 是一个输入流,使用内部缓冲区来提高读取效率。它会先将数据读取到内存缓冲区中,随后再从缓冲区中读取数据。

常用构造函数

  • BufferedInputStream(InputStream in):根据指定的输入流创建一个新的 BufferedInputStream,使用默认大小的缓冲区。

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("fileName.txt"));
  • BufferedInputStream(InputStream in, int size):根据指定的输入流和缓冲区大小创建一个新的 BufferedInputStream

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("fileName.txt"), 8192);


常用方法

  • int read():读取一个字节的数据,并返回一个整数(0~255)。如果到达流的末尾,则返回 -1。
  • int read(byte[] b):读取多个字节到字节数组中,并返回实际读取的字节数。
  • int read(byte[] b, int off, int len):从输入流中读取最多 len 个字节的数据,并将其存储在字节数组 b 中,从 off 位置开始。
  • void close():关闭输入流,释放与之相关的所有系统资源。
public static void main(String[] args) {
    try {
        BufferedInputStream  bis = new BufferedInputStream(new FileInputStream("fileName.txt"));
        int byteData;
        while((byteData = bis.read()) != -1 ){
            System.out.println((char) byteData);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

2.BufferedOuptStream

BufferedOutputStream 是一个用于提高向文件或其他输出流写入字节流效率的类。它通过使用内部缓冲区来减少实际写入操作的次数,从而提高性能。

常用构造函数

  • BufferedOutputStream(OutputStream out):根据指定的输出流创建一个新的 BufferedOutputStream,使用默认大小的缓冲区。
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("fileName.txt"));
  • BufferedOutputStream(OutputStream out, int size):根据指定的输出流和缓冲区大小创建一个新的 BufferedOutputStream

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("fileName.txt"), 8192);

常用方法

  • void write(int b):将指定的字节写入输出流。
  • void write(byte[] b):将字节数组中的所有字节写入输出流。
  • void write(byte[] b, int off, int len):将字节数组中的指定部分写入输出流,从 off 位置开始,写入 len 个字节。
  • void flush():刷新此输出流,强制将所有缓冲的输出字节写入底层输出流。
  • void close():关闭输出流,释放与之相关的所有系统资源。
public static void main(String[] args) {
    try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\Users\\lizhonghua\\Desktop\\HarmonyOS.txt"))) {
        String content = "Hello Worldfghj!";
        // 将字符串转换为字节数组并写入文件
        bos.write(content.getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值