博客
关于我
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/

    你可能感兴趣的文章
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>
    Nitrux 3.8 发布!性能全面提升,带来非凡体验
    查看>>
    NI笔试——大数加法
    查看>>
    NLog 自定义字段 写入 oracle
    查看>>
    NLog类库使用探索——详解配置
    查看>>
    NLP 基于kashgari和BERT实现中文命名实体识别(NER)
    查看>>