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

    你可能感兴趣的文章
    OAuth2.0四种模式的详解
    查看>>
    OAuth2授权码模式详细流程(一)——站在OAuth2设计者的角度来理解code
    查看>>
    oauth2登录认证之SpringSecurity源码分析
    查看>>
    OAuth2:项目演示-模拟微信授权登录京东
    查看>>
    OA系统多少钱?OA办公系统中的价格选型
    查看>>
    OA系统选型:选择好的工作流引擎
    查看>>
    OA让企业业务流程管理科学有“据”
    查看>>
    OA项目之会议通知(查询&是否参会&反馈详情)
    查看>>
    Vue.js 学习总结(13)—— Vue3 version 计数介绍
    查看>>
    OA项目之我的会议(会议排座&送审)
    查看>>
    OA项目之我的会议(查询)
    查看>>
    OA项目之我的审批(会议查询&会议签字)
    查看>>
    OA项目之项目简介&会议发布
    查看>>
    ObjC的复制操作
    查看>>
    Object c将一个double值转换为时间格式
    查看>>
    object detection之Win10配置
    查看>>
    object detection训练自己数据
    查看>>
    object detection错误Message type "object_detection.protos.SsdFeatureExtractor" has no field named "bat
    查看>>
    object detection错误之Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
    查看>>
    object detection错误之no module named nets
    查看>>