IO流理解

简介: 个人学习理解

计算机本质上存储都是通过字节进行存储数据,为什么要有字节流跟字符流呢

字符流是方便我们进行操作,使之变成我们看得懂的东西,所以才有字符流

字节流的顶级父类 输入流为InputStream 输出流为OutputStream

字符流的顶级父类 输入流为Reader 输出为Writer

数据追加续写可以在创建io流的后面boolean append有个参数 填入true即可开启续写

命名规则 其实都是在顶级父类前面加上一些特定的操作类型

比如 FileOutputStream 就是操作文件的输出流

读取的时候

如果是一个一个读取那么返回值就是int类型 如果读取不到将返回-1

如果是按照数组去读取的话,那么如果读取不到返回的是null

用到流的时候再去创建相应的流 不然有时候会重置文件

最后结束的时候记得关流 先开启的后关闭

关于缓冲区的 其实本质上就是一个数组

速率更快的就是底层读取写入的时候是一个数组一个数组进行搬运数据 所以速率更快

缓冲区中 我们如果还要后续继续写入那我们就应该通过flush方法去把缓冲区清空 这样才能确保我们的数据被接收

如果后续不写入了 直接close关流即可 关流的时候会有先调用flush方法然后在关流

字符流才有flush方法

还要记住缓冲流的特殊方法

即newLine()`: 写一行行分隔符,由系统属性定义符号。

readLine()`: 读一行文字。

转换流 InputStreamReader OutputStreamWriter

其实就是字符编码和字符集 可以让我们按照指定的编码格式去进行读取写入

序列化与反序列化ObjectInputStream ObjectOutputStream

一个对象要想序列化,必须满足两个条件:

该类必须实现java.io.Serializable 接口

该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用transient 关键字修饰。意思就是如果不让io流去操作这个属性 我们就用transient`去修饰他一下

需要注意的还有序列号 如果序列号不同的话 是会报异常的

所以就需要去让序列号不可被改变

private static final long serialVersionUID = 1L;

相关文章
|
7月前
|
C语言 iOS开发 C++
10. C++IO流
10. C++IO流
47 0
|
7月前
|
算法 C语言 C++
【C++】C++的IO流
【C++】C++的IO流
|
4月前
|
Java
|
7月前
|
存储 Java
IO流知识篇
IO流知识篇
|
C语言 C++ iOS开发
IO流(C++)
IO流(C++)
85 0
IO流(C++)
io流
inputStream和Reader是所有输入流的基类
|
安全 编译器 C语言
【C++】IO流
【C++】IO流
75 0
|
iOS开发
C++IO流(2)
C++IO流(2)
|
算法 关系型数据库 MySQL
c++IO流——开工啦
📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段>——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享学习成果和小项目的 📖作者主页:热爱编程的小K 📖专栏链接:c++ 🎉欢迎各位→点赞👏 + 收藏💞 + 留言🔔​ 💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🐾 ———————————————— 版权声明:本文为CSDN博主「热爱编程的小K」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_72157449
c++IO流——开工啦