Java--IO流

本文深入探讨了IO流的基本概念,包括其目的、种类、字节流与字符流的区别,以及实现过程中的关键步骤,如格式化/解析、缓冲、编码转换和传递。通过理解这些核心内容,读者能够更好地掌握如何在程序中使用IO流进行数据的读取和写入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

        流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。
        用来进行输入输出操作的流就称为IO流(Input Output Stream)。换句话说,IO流就是以流的方式进行输入输出。
        我们通常所说的IO流指的是Input和Output,可以将数据写入文件,也可以读取文件中的数据。

目的

        集合或数组保存数据的时候讲数据保存在内存中,保留在内存中的数据,一旦断电,就没有了。因为内存中存储的数据是临时的,所以,如果想要将数据永久保存,则可以存储在文件中,我们可以通过IO流我们可以将数据写入到文件中,也可以将文件中的数据读取到程序中。比如我们经常用到的读取文件拷贝文件等,都是IO流的具体实现。

种类

        IO流(Input Output Stream),顾名思义,即Input输入流和Output输出流,其中输入输出流均有字符流和字节流的用法,比如字节流:输入流为InputStream,输出流为OutputStream;而字符流:输入流为Reader,输出流为Writer。

    字节流和字符流的区别

字节流字符流
读取方式字节(byte)字符(char)
速度较慢较快
效率

步骤

        在IO流里,输入输出分为4步:格式化/解析,缓冲,编码转换和传递。

    格式化/解析

        在内部数据表示(以字节为单位)与外部数据表示(以字符为单位)之间进行双向转换。例如一个2字节的整数10002,就需要5个字符来表示。

    缓冲

        用于在格式/解析与传递之间缓存字符序列。对于输出,较短的字符序列格式化之后并不马上输出,而是保存在缓冲区里,待累积到一定规模之后再传递到外部设备。相反,从外部设备读入的大量数据也是先放在缓冲区,然后逐步取出完成输入。默认时,IO流的输入输出都是经过缓冲的,也可以让IO流工作在无缓冲模式下。

    编码转换

        是将一种字符表达式转换成另一种字符表达式。如果格式化产生的字符表达式与外部字符表达式不同(输出时),或者外部表达式与IO流能解析的表达式不同(输入时),就必须进行编码转换。如多字节编码与宽字符编码之间的转换等。多数情况下并不需要进行编码转换。

    传递

        主要是与外部设备进行通信。输出时,传递负责将经过格式化、缓冲即编码转换后的字符序列发送到外部设备;输入时,则负责将外部设备抽取数据,为其后进行的编码转换、缓冲及解析提供字符序列。

    具体实现过程

  1. 确定源和目标文件
  2. 构建流对象
  3. 读取内容
  4. 写出内容
  5. 关闭流

总结

IO流很强大,基本上我们所有的程序都用到了这方面的内容,知不是我们没有去仔细研究,接下来两篇博客,我将侧重讲解字节流和字符流。

end

谢谢您的阅读!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值