博客
关于我
Java中IO流总介
阅读量:505 次
发布时间:2019-03-07

本文共 2131 字,大约阅读时间需要 7 分钟。

Java IO流是Java程序中处理数据输入输出的重要机制,主要用于读取和写入文件、网络或内存中的数据。Flow(流)在Java中表示数据的传输通道,分为输入流和输出流,根据不同的分类和特性,它们可以被进一步细化。

按流向分类

输入流和输出流是基础的流类型。输入流的职责是读取数据,输出流则负责写出数据。Java中的标准输入流和输出流分别由System.in和System.out表示,分别默认映射为键盘输入和控制台输出。

按流性质分类

原始流和装饰流是根据数据处理的方式划分的。原始流直接操作字节或字符,效率较低。而装饰流通过包装原始流,增加额外功能,如缓存机制,最常见的装饰流是BufferedInputStream和BufferedReader,它们通过缓存数据提升读写效率。

按流类型分类

字节流和字符流是根据处理的数据单位划分的。字节流适用于处理单字节数据,如图片、视频等,效率较高。字符流专门处理二字节字符,如汉字,同样支持缓存流来提高效率。

Java I/O 类型概述

字节流

  • 字节输入流(InputStream)和字节输出流(OutputStream)是最基础的字节流类型。
  • filePath: 四种主要字节流接口:FileInputStream、FileOutputStream、ByteArrayInputStream、ByteArrayOutputStream。

字符流

  • 字符输入流(Reader)和字符输出流(Writer)用于处理文本文件。
  • 常用实现: InputStreamReader、OutputStreamWriter。

输出流特点

1. PrintStream(字节输出流)

  • 无对应的输入流。
  • 支持写入基本数据类型,字符串,对象和数组。
  • 满足自动行刷新(默认不开启需手动设置)。
  • 适用于日志记录等场景,但不适合处理大型二进制文件。

2. PrintWriter(字符输出流)

  • 在输出流的基础上增加新功能,适合处理文本数据。
  • 提供完整的I/O操作支持,效率较高。

老生常谈:读取键盘输入

有多种方式读取用户输入:

  • 字节流方式

    InputStream in = System.in;while (true) {    byte[] buffer = new byte[1024];    int readLength = in.read(buffer);    // 处理数据}
  • 字符流方式

    InputStreamReader reader = new InputStreamReader(System.in);while (true) {    char[] buffer = new char[1024];    int readLength = reader.read(buffer);    // 处理数据}
  • 高效读取方式

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));while (true) {    String input = reader.readLine();    // 处理结果}
  • 对象流

    对象流用于传输Java对象信息,可以管理多个对象的写入和读取。关键点包括:

    • 使用ObjectOutputStreamObjectInputStream进行操作。
    • 对参与序列化的类,需保证实现Serializable接口。
    • 导出serialVersionUID以确保兼容性和一致性。

    ####示例

    // 写入对象ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test.obj"));oos.writeObject(new Person("张三", 30));// 读取对象ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.obj"));Person person = (Person) ois.readObject();

    数据流(Data Stream)

    数据流专门处理基本数据类型和字符串信息,具有高效性和灵活性。常见实现包括:

    • ** CellsRus pandCheckedInputStream/OutputStream**
    • ** DataInputStream/DataOutputStream**

    内存流

    内存流是一种特殊的流,它使用内存中的字节数组或字符数组作为数据存储介质。具体实现包括:

    • ByteArrayInputStream/ByteArrayOutputStream
    • CharBufferInputStream/CharBufferOutputStream

    内存流通常用于快速处理和传输数据,特别适用于网络传输场景。

    总结来说,Java中的IO流体系功能强大且灵活,根据不同需求,可以选择合适的流类型和处理方式,充分发挥性能优势。平时开发中,合理选择流的组合和优化,能显著提升程序性能和架构稳定性。

    转载地址:http://khtjz.baihongyu.com/

    你可能感兴趣的文章
    Node-RED订阅MQTT主题并调试数据
    查看>>
    Node-RED通过npm安装的方式对应卸载
    查看>>
    node-request模块
    查看>>
    node-static 任意文件读取漏洞复现(CVE-2023-26111)
    查看>>
    Node.js 8 中的 util.promisify的详解
    查看>>
    node.js debug在webstrom工具
    查看>>
    Node.js HTTP模块详解:创建服务器、响应请求与客户端请求
    查看>>
    Node.js RESTful API如何使用?
    查看>>
    node.js url模块
    查看>>
    Node.js Web 模块的各种用法和常见场景
    查看>>
    Node.js 之 log4js 完全讲解
    查看>>
    Node.js 函数是什么样的?
    查看>>
    Node.js 函数计算如何突破启动瓶颈,优化启动速度
    查看>>
    Node.js 切近实战(七) 之Excel在线(文件&文件组)
    查看>>
    node.js 初体验
    查看>>
    Node.js 历史
    查看>>
    Node.js 在个推的微服务实践:基于容器的一站式命令行工具链
    查看>>
    Node.js 实现类似于.php,.jsp的服务器页面技术,自动路由
    查看>>
    Node.js 异步模式浅析
    查看>>
    node.js 怎么新建一个站点端口
    查看>>