首页 > 其他分享 >《第二十六章 IO 流 - 字节流》

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

时间:2024-09-03 19:53:34浏览次数:8  
标签:java 字节 IO void IOException io 第二十六章 import

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

标签:java,字节,IO,void,IOException,io,第二十六章,import
From: https://blog.csdn.net/asd4353012/article/details/141870343

相关文章

  • AURIX™ Development Studio1.10.2(ADS)安装使用教程
    零、介绍AURIX™DevelopmentStudio是Infineon为TriCore™-basedAURIX™microcontroller系列车规单片机设计的一款免费IDE(集成开发环境),基于EclipseIDE开发。其包含了C编译器、TASKING调试器、多核调试器、iLLD库等功能。用户可通过AURIX™DevelopmentStudio-InfineonT......
  • 基于CNN-BiGRU-Attention的自行车租赁数量预测研究(Matlab代码实现)
           ......
  • 物联网通讯协议MQTT、NB-IOT、Zigbee、CoAP、RFID、BLUETOOTH、NFC、4G和HTTP
    物联网协议集一、按网络四层协议分类NB-IoT,LORA,WIFI,蓝牙,zigbee,4G都是物理层的,这几个都需要芯片模组支持(硬件支持)而MQTT,COAP,HTTP都是应用层协议,这些需要开发服务器,或者对接云平台厂商(软件支持)所以(MQTT,COAP,HTTP)是居于(NB-IoT,LORA,WIFI,蓝牙,zigbee,4G)的上层协议物理层中二、按需要网关来分......
  • 多目标应用:基于自组织多模态多目标鸽群优化算法MMOPIO的移动机器人路径规划研究(提供MA
      一、机器人路径规划介绍移动机器人(Mobilerobot,MR)的路径规划是移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大......
  • Python教程(十七):协程、 asyncio与 aiohttp【异步IO】
    文章目录专栏列表1.异步IO的基本概念1.1同步与异步1.2协程1.3asyncio1.4aiohttp2.携程2.1定义协程2.2运行协程3.asyncio3.1事件循环解释3.2获取文件示例3.2并发获取文件示例4.aiohttp:异步HTTP客户端/服务器4.1安装aiohttp4.2异步HTTP请求4.3异......
  • minio-docker
    docker-composeversion:"3"services:minio:image:minio/minio:latestcontainer_name:miniorestart:alwaysports:-"9000:9000"-"9090:9090"......
  • 前波士顿咨询Platinion董事总经理陈果加入望繁信科技
    “很荣幸邀请果总加盟望繁信科技!作为中国互联网可以查到的写作流程挖掘介绍文章第一人,他的先驱性工作为流程挖掘在中国的知识普及和应用创新做出了重要贡献!更难能可贵的,是我们和果总在价值观层面高度契合!我们非常欢迎他加入,他深厚的行业影响力、洞察力和经验将对公司加速成长起到极......
  • 辐射76畅玩无阻:解决x3daudio1_7.dll缺失或损坏的实用技巧
    在《辐射76》游戏中遇到x3daudio1_7.dll缺失或损坏的问题时,确实会阻碍玩家顺畅地享受游戏。以下是一些实用技巧,旨在帮助玩家解决这一问题:1.重新安装DirectX原因:x3daudio1_7.dll是DirectX音频处理库的一部分,缺失或损坏可能是由于DirectX组件未正确安装或损坏所致。步骤:......
  • MINIO部署
    创建挂载目录mkdir-p/root/dockerData/ivan_minio/启动方式docker-compose方式启动创建docker-compose.yml文件vimdocker-compose.ymlversion:'3'services:minio:image:"quay.io/minio/minio:RELEASE.2022-08-02T23-59-16Z"container_name:mini......
  • Go - Web Application 2
    Creatingadatabaseconnectionpool//Thesql.Open()functioninitializesanewsql.DBobject,whichisessentiallya//poolofdatabaseconnections.db,err:=sql.Open("mysql","web:pass@/snippetbox?parseTime=true")iferr!=nil......