当前位置: 首页 > article >正文

《第二十六章 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 类及其相关的子类,可以实现各种字节数据的读写操作。在实际应用中,要根据具体需求合理选择字节流的类型,并注意性能优化和资源管理,以确保程序的高效和稳定运行。


http://www.kler.cn/a/288905.html

相关文章:

  • 全面掌握 AutoGluon:从入门到生产环境的实践指南
  • 【MySQL基础篇】多表查询(隐式/显式内连接、左/右外连接、自连接查询、联合查询、标量/列/行/表子查询)
  • 基于卷积神经网络融合Inception模块的人脸识别
  • 计算机网络B重修班-期末复习
  • Rust: offset祼指针操作
  • 美国加州房价数据分析01
  • 在项目中使用 redis存储 数据,提高 项目运行速度
  • 【Linux】 理解 Linux 中的 `dup2` 函数
  • Spring框架中的@EventListener注解浅谈
  • 【C++ Primer Plus习题】8.2
  • 直播路由器的原理是什么
  • Linux CentOS 7.39 安装mysql8
  • rabbitmq发送的消息接收不到
  • 告别文档处理烦恼,PDF Guru Anki一键搞定所有
  • 多目标应用:基于双存档模型的多模态多目标进化算法(MMOHEA)的移动机器人路径规划研究(提供MATLAB代码)
  • C语言之猜数字小游戏
  • 【苍穹外卖】Day3 菜品接口
  • dinput8.dll错误应该如何修复呢?五种快速修复dinput8.dll错误的问题
  • SpringBoot开发——初步了解SpringBoot
  • CephX 认证机制及用户管理
  • 功能测试常用的测试用例大全
  • 大模型入门 ch01:大模型概述
  • 强化学习,第 5 部分:时间差异学习
  • 数据结构——单链表相关操作
  • C# 开发环境搭建(Avalonia UI、Blazor Web UI、Web API 应用示例)
  • n*n矩阵,输出矩阵中任意两点之间所有路径