Java I/O(1)——Java I/O流概述

本文介绍了Java I/O流的基本概念,包括IO流的分类、字符流与字节流的区别。Java I/O流分为字节流和字符流,字节流适用于所有类型数据的处理,字符流则专用于文本文件操作。同时,文章讨论了节点流与处理流的概念,处理流可以提高读写效率,并提供了多种类型的流示例。

IO流主要用来处理设备之间的数据传输,流的本质是数据传输。Java对于数据的操作都是通过流的方式来实现的,而Java用于操作流的对象都在IO包中

IO流的分类

Java I/O流主要包含以下几个层次,包含三个部分。在整个Java IO包中最重要的就是5个类和1个接口,5个类是指:FileInputStreamOutputStreamReaderWriter;一个接口是指Serializable接口

  1. 流式部分——IO主体部分
  2. 非流式部分——主要包含一些辅助流失部分的类,如File
  3. 其他类——如:与文件读取部分与安全相关的类,SerializablePermission类,以及与本地操作系统相关的文件系统的类,如FileSystem类和Win32FileSystem

Java中字符采用的尸Unicode标准,因此一个字符代表16位,一个字节代表8位,1个字符可以用2个字节表示

字符流和字节流的区别

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:

  • 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
  • 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

  • 字节流:一次读入或读出是8位二进制。通过字节的形式一个字节一个字节或者字节数组来操作文件中内容,可以操作一切文件。

  • 字符流:一次读入或读出是16位二进制。通过单个字符或者是字符数组的形式来操作文件的,存在一定的局限性,是专门用于对文本文件操作的,默认的版本为GBK

设备上的数据无论是图片或者视频,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据。

这里写图片描述

这里写图片描述
这里写图片描述

  • 对文件进行操作

    • FileInputStream
    • FileOutputStream
    • FileReader
    • FileWriter
  • 对管道进行操作

    • PipedInputStream
    • PipedOutputStream
    • FileReader
    • FileWriter
  • 字节字符数组

    • ByteArrayInputStream
    • ByteArrayOutputStream
    • CharArrayReader
    • CharArrayWriter
  • Buffer缓冲流(缓冲流是用来提高输入和输出效率的。我们学习了输入和输出的字节流和字符流,但是如果读写的文件比较大,如果一个个字节或者字符来读取写入的时候,耗费的时间比较长,即使用字符或字节数组也是耗时的,这里就需要更加高效的流,来提高速度了,那就是缓冲流)

    • BufferedInputStream
    • BufferedOutputStream
    • BufferedReader
    • BufferedWriter
  • 转化流(换换流是字节和字符沟通的桥梁,可以说是给字节流穿上一件外衣,来制定编码表的格式,实际进行操作的还是字节流。)

    • InputStreamReader
    • OutputStreamWriter
  • 数据流

    • DataInputStream
    • DataOutputStream
  • 打印流

    • PrintStream
    • PrintWriter
  • 对象流(把封装的对象直接输出,而不是一个个转换为字符串输出)

    • ObjectInputStream
    • ObjectOutputStream

【注】我们每次存储到文件或者读取文件中的内容都是文本的。但是如果我们想存储对象怎么办呢?例如存储人类person(包含姓名和年龄)
对象的序列化:ObjectOutputStream(OutputStream out)通过write方法,将对象写入到文件中。
对象的反序列化:ObjectInputStream(InputStream in)通过readObject的方法,将文件中的对象读取出来。

  • 序列化 (把对象直接转换为二进制,写入磁盘)
    • SequenceInputStream
节点流

节点流:直接与数据源相连,读入或读出。
直接使用节点流,读写不方便,为了更快的读写文件,才有了处理流。
这里写图片描述

处理流

处理流和节点流一块使用,在节点流的基础上,再套接一层,套接在节点流上的就是处理流。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

这里写图片描述

感谢

https://www.cnblogs.com/zhaoyanjun/p/6292384.html
https://blog.youkuaiyun.com/lfh15732626246/article/details/53466339

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值