当前位置: 首页 > news >正文

Java基础:IO流有哪些,各有什么特点和功能

具体操作分成面向字节(Byte)和面向字符(Character)两种方式。

如下图所示:

IO流的三种分类方式

IO流的层次结构

IO流的常用基类有:

字节流的抽象基类:InputStream和OutputStream;

字符流的抽象基类:Reader和Writer。

注意:由这四个类派生出来的子类名称均以其父类名作为子类名的后缀,以前缀为其功能。如,InputStream的子类——FileInputStream,Reader的子类——FileReader。


1) 字节流:

InputStream 与 OutputStream;

InputStream 是所有字节输入流的父类,其定义了基础的读取方法;

OutputStream 是所有字节输出流的父类,其定义了基础的写出方法包含:

文件流:

FileOutputStream 是文件的字节输出流,我们使用该流可以以字节为单位将数据写入文件(默认覆盖模式,第二个参数设施为 true 可改变为追加模式)。

 FileInputStream 是文件的字节输入流,我们使用该流可以以字节为单位读取文件内容。

缓冲流:

BufferedOutputStream 缓冲字节输出流,需用flush方法将缓存的字节写出或在关闭流时一次性写出。

BufferedInputStream 是缓冲字节输入流。

对象流:

ObjectOutputStream 是用来对对象进行序列化的输出流。

ObjectInputStream 是用来对对象进行反序列化的输入流。


2) 字符流:Reader 和 Writer

Reader 是所有字符输入流的父类。

Writer 是所有字符输出流的父类。

字符流是以字符 (char) 为单位读写数据。一次处理一个 unicode。字符流都是高级流,其底层是依靠字节流进行读写数据。

包含:转换流:

InputStreamReader:字符输入流,使用该流可以设置字符集

OutputStreamWriter:字符输出流,使用该流可以设置字符集字符缓冲流

PrintWriter 具有自动行刷新的缓冲该字符输出流,需第二个参数设置为 true。

BufferedReader 是缓冲字符输入流;

注:PrintWriter 写出字符串时通常不用 Writer 提供的 write( ) 相关方法,而是用重载的 print 和println 方法。

BufferedReader 读取字符串时可用 readLine()连续读取一行字符串,直到读取到换行符为止,返回的字符串中不包含该换行符,未读到返回 null。


3)序列化流:ObjectInputStream和ObjectOutputStream

对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过程,

对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程。

既然对象的输出流将对象写入到文件中称之为对象的序列化,那么可想而知对象所对应的class必须要实现Serializable接口。(查看源码可得知:Serializable接口没有任何的方法,只是作为一个标识接口存在)。

http://www.lryc.cn/news/60258.html

相关文章:

  • MySQL、PostgreSQL、Oracle、SQL Server数据库触发器实现同步数据
  • 因为我没交周报,leader要罚款200元,怎么给他挖坑?能以敲诈勒索罪告他吗?...
  • java跨域问题
  • 故障重现, JAVA进程内存不够时突然挂掉模拟
  • 数画-AI绘画-免费的人工智能AI绘画网站
  • ElasticSearch安装、启动、操作及概念简介
  • Linux用户管理
  • Docker 的安装和镜像容器的基本操作
  • 被盗的ChatGPT账户在暗网热销,ChatGPT的隐私和安全问题依旧值得关注
  • OpenCV2 计算机视觉应用编程秘籍:6~10
  • 如何对农田温室气体进行有效模拟?
  • java数据结构刷题练习
  • 《商用密码应用与安全性评估》第一章密码基础知识1.6密钥交换协议
  • Qt Quick - TabBar
  • ElasticSearch集群搭建
  • 【pan-sharpening 攻击:目标检测】
  • nginx反向代理_负载均衡的配置
  • 程序员随时担心被抛弃......大厂外包值不值得去?
  • C++解释器模式实战:从设计到应用的全面指南
  • 使用华为云免费资源训练Paddle UIE模型
  • 深度学习12. CNN经典网络 VGG16
  • Doris(3):创建用户与创建数据库并赋予权限
  • 深入浅出 Golang 内存管理
  • 基于Python的简单40例和爬虫详细讲解(文末赠书)
  • Vector - CAPL - CAN x 总线信息获取(续2)
  • C++基础知识【8】模板
  • MAC-安装Java环境、JDK配置、IDEA插件推荐
  • Mysql如何避免常见的索引失效
  • SpringBoot集成Redis及问题解决
  • PyTorch 人工智能研讨会:6~7