《第二十六章 IO 流 - 字节流》

在 Java 编程中,输入输出(IO)操作是非常重要的一部分,而字节流(Byte Stream)则是其中一种基本的数据传输方式。本章将详细介绍字节流,包括 InputStream 和 OutputStream 类以及字节流的读写操作。

一、字节流概述

字节流用于处理以字节为单位的数据传输,适用于处理二进制数据,如图像、音频、视频等文件。

二、InputStream 类

(一)常用方法

  1. int read(): 从输入流中读取一个字节的数据,并返回该字节的值(范围在 0 到 255 之间),如果到达流的末尾则返回 -1 。
  2. int read(byte[] b): 将多个字节读入到字节数组 b 中,并返回实际读取的字节数,如果到达流的末尾则返回 -1 。
  3. void close(): 关闭输入流,释放相关资源。

(二)示例代码

import java.io.FileInputStream;
import java.io.IOException;

public class InputStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.txt")) {
            int byteRead;
            while ((byteRead = fis.read())!= -1) {
                System.out.print((char) byteRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、OutputStream 类

(一)常用方法

  1. void write(int b): 将指定的字节写入输出流。
  2. void write(byte[] b): 将字节数组 b 中的所有字节写入输出流。
  3. void close(): 关闭输出流,确保数据被完整写入并释放相关资源。

(二)示例代码

import java.io.FileOutputStream;
import java.io.IOException;

public class OutputStreamExample {
    public static void main(String[] args) {
        try (FileOutputStream fos = new FileOutputStream("output.txt")) {
            String content = "Hello, Byte Stream!";
            fos.write(content.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

四、字节流的读写操作

(一)文件读写

  1. 读取文件
    • 可以逐字节读取,也可以将多个字节读入字节数组进行处理。
  2. 写入文件
    • 将字节数据或字节数组写入文件。

(二)网络传输

通过套接字(Socket)进行网络通信时,可使用字节流发送和接收数据。

(三)字节数组操作

在内存中对字节数组进行读写操作。

五、字节流的性能考虑

(一)缓冲区的使用

为了提高读写效率,可以使用缓冲区。例如,BufferedInputStream 和 BufferedOutputStream 类。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedStreamExample {
    public static void main(String[] args) {
        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("example.txt"));
             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
            int byteRead;
            while ((byteRead = bis.read())!= -1) {
                bos.write(byteRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

(二)批量读写

一次性读取或写入多个字节,而不是逐个字节操作。

六、实际应用场景

  1. 二进制文件处理
    如图片、音频、视频等文件的读取和写入。

  2. 数据加密和解密
    对字节数据进行加密或解密操作。

  3. 网络通信
    在网络编程中传输二进制数据。

七、常见问题与注意事项

  1. 资源管理
    使用完字节流后,一定要调用 close 方法关闭流,以释放资源。

  2. 异常处理
    读写操作可能会抛出 IOException ,需要进行适当的捕获和处理。

  3. 字节顺序
    在处理多字节数据(如整数、浮点数等)时,要注意字节的顺序(大端序或小端序)。

  4. 数据完整性
    确保写入的数据完整,并在读取时正确解析。

八、总结

字节流是 Java 中处理二进制数据的重要手段,通过 InputStream 和 OutputStream 类及其相关的子类,可以实现各种字节数据的读写操作。在实际应用中,要根据具体需求合理选择字节流的类型,并注意性能优化和资源管理,以确保程序的高效和稳定运行。

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值