加强部分IO视频终于看完了,每天只是记录一些学习笔记,把老师写的示例自己敲一遍,就没有时间了,很无奈,只能白天挤时间复习
唉,发发牢骚吧,给自己鼓鼓劲
辞职还要等,公司缺人,没办法,对象还老闹,嫌我不管她了,真TMD愁人。但是我也是为了我们的将来才这么的拼命啊,理解我一下好么?
面向对象啊,面向“对象”。。。。。。
给自己鼓劲吧,加油,未来是自己的,抓住黑马,成功的捷径!
操作对象
ObjectInputStream与ObjectOutputStream
对象的持久化存储(序列化)
被操作的对象需要实现Serializable
功能是让流与对象相结合
除了继承自OutputStream外还有
writeInt(int val)写入一个32位的int值
writeObject(Object obj)将指定的对象写入OutputStream
Serializable接口,实现它启动序列化
接口内没有方法 为标记接口
序列号是根据类中成员生成的
static final long serialVersionUID = 42L;
序列化的UID可以自己定义
静态是不能被序列化的
只能序列化 堆中内容
如果非静态成员不想进行序列化加修饰符transient
transient int age;
保证其值在堆内存中存在
RandomAccessFile
随机访问文件,自身具备读写方法
支持对随机访问文件的读取和写入
该类不算是IO体系种的子类,而是直接继承自Object。但是它是IO包中的成员,因为它具备读和写的功能。而且通过指针对数组的元素进行操作。
可以通过getFilePointer获取指针位置
同时可以通过seek改变指针的位置
其实其能够完成读写的原理是内部封装了字节输入流和输出流
通过构造函数可以看出,该类只能操作文件。而且操作文件还有模式,只读、只写等,而且该对象的构造要操作的文件不存在,会自动创建。
mode参数指定用以打开文件的访问模式,如果模式为只读 r,不会促行间文件。会去读取一个已存在文件,如果该文件不存在,而且会出现异常。如果模式为rw,操作文件不存在会自动创建,如果存在则不会覆盖
管道流
PiepedInputStream和PiepedOutputStream
输入输出可以直接进行连接,通过结合线程使用。
涉及到多线程技术的IO流;
IO包中的其他类
操作基本数据类型
DataInputStream与DataOutputStream
凡是操作基本数据类型就用这个
writeUTF和readUTF用UTF修改版编码
操作字节数组
ByteArrayInputStream与ByteArrayOutputStream
不涉及任何底层资源操作,所以不用关闭
不会产生任何IO异常
ByteArrayInputStream:在构造的时候,需要接收数据源。而且数据源是一个字节数组
ByteArrayOutputStream:在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组。这就是数据目的地
因为这两个流对象都操作的数组,并没有使用系统资源,所以,不用进行close关闭
在流操作规律讲解时:
源设备:
键盘System.in,硬盘FileStream,内存ArrayStream
目的设备:
控制台System.out,硬盘FileStream,内存ArrayStream
用流的读写思想来操作数组
操作字符数组
CahrArrayReader与CharArrayWriter
操作字符串
StringReader与StringWriter
字符编码
字符流的出现是为了方便操作字符
更重要的是加入了编码转换
通过子类转换流来完成(转换流)
InputStreamReader
OutputStreamWriter
在两个对象进行构造的时候可以加入字符集
编码表的邮来
计算机只能识别二进制数据,早期由来是电信号
为了方便应用计算机,让它可以识别各个国家的文字
就将各个国家的文字用数字来表示,并一一对应兴城一张表,这就是编码表
常见的编码表
ASCII:美国标准信息交换码
用一个字节的7位可以表示
ISO8859-1:拉丁码表。欧洲码表
用一个字节的8位表示
GB2312:中国的中文编码表
GBK:中国的中文编码表升级,融合了更多的中文文字符号
Unicode:国际标准码,融合了多种文字
所有文字都用两个字节表示,java语言使用的就是unicode
UTF-8:最多用三个字节表示一个字符