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

    你可能感兴趣的文章
    SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用
    查看>>
    Qt知识: 画刷风格
    查看>>
    QT的OpenGL渲染窗QOpenGLWidget Class
    查看>>
    QT的C++程序加载动态链接库DLL(Linux下是so)的方式
    查看>>
    QT界面操作1:如何跟踪鼠标位置?
    查看>>
    Qt环境搭建(Visual Studio)
    查看>>
    QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)...
    查看>>
    QT样式表——url路径
    查看>>
    QT数据库(三):QSqlQuery使用
    查看>>
    QT教程5:消息框
    查看>>
    SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存
    查看>>
    pom.xml中提示web.xml is missing and <failonmissingw>...
    查看>>
    Pomelo开发中Web客户端开发API简介
    查看>>
    QT教程2:QT5的体系构架
    查看>>
    PON架构(全光网络)
    查看>>
    PoolingHttpClientConnectionManager原理剖析
    查看>>
    QT教程1:ubuntu18.04安装QT5
    查看>>
    POP-一个点击带有放大还原的动画效果
    查看>>
    POP3 协议在计算机网络中的优缺点
    查看>>
    qt批量操作同类型控件
    查看>>