2022-08-09 田龙跃 学习笔记
流分类
1.节点流:做事制作一次就完成,不做任何其他处理
(缓冲)处理流:(有一个缓冲区Buffered)做了一次中间处理(Buffered****()缓冲区的构造器是传入一个节点流)
2.输入流:从硬盘到内存 输出流:从内存到硬盘()((自动)流读完之后会调用一次mark方法标记到已经读到哪(位置),然会调用reset设置流下一次从mark的位置开始读)
3.字节流(任意文件):因为只读0 1(字节),所以读到返回-1就说明读到最后了 inputStream-》fileInputStream-》BufferedInputStream(字节流读取到哪个字符集的文本就会按照哪个字符集编码进行输出)
字符流(文本文件:.txt .java .py):bufferedReader .readLine能直接读一行(字符流读取时一定要看好读的文本是哪个字符集,输出的文本是那个字符集,输入和输出的字符集一致才不会乱码)
字节
GBK存储中文英文都是2个字节
UTF-8存储中文3个字节,存储英文一个字节(看情况选择使用)
Tips
//中?乱码问题,换成GBK 或者 UTF-8
//System.out.println(new String(buf,"UTF-8"));
//System.out.println(new String(buf,0, length,"UTF-8"));
//System.out.println(new String(buf, 0, length));
关流
流一定要关闭,缓冲区一定要清洗flush
OutputStream可以自动帮你创建一个文件,但是不能创建多级目录
OutputStream outputStream=new FileOutputStream(file1,true);追加输出:是outputstream的一中构造方法(加了一个boolean类型表示是否可以追加)
缓冲区
缓冲区(存在的原因):因为如果频繁对磁盘进行操作会很慢(减少对磁盘的IO操作次数)--缓和冲击,例如操作磁盘比操作内存慢的很多效率很低
bufferedOutputStream(InputStream)是一种‘包装’设计模式 构造函数是讲一个输入输出流放入其中,将这个流强化成使用缓冲区的流
bufferedOutputStream(InputStream).close方法也会帮我们自动关闭他所包装的输入输出流(outputStream也会自动使用.flush方法清洗缓冲区)
try (OutputStream ostream = out) {
flush();
}---jdk7新特性 自动清洗
流的关闭顺序------后开先关; 如果A依赖B,关闭A(外层)就把B(内层)也关了。(开就是开始使用)
序列化知识
序列化对象版本号:写入和导出的版本号要一致**
序列化:将对象写入到IO六种,将内存模型的对象变成字节数字,用来在网络上传输
反序列化:反过来
1.所有需要网络传输的对象都需要实现序列化接口
2.类名,实例变量都会被序列化,方法,类变量,transient变量不会被序列化
3.想让某个变量不被序列化,可以使用transient修饰
4.序列化对象的引用类型成员变量也必须是序列化类型
5.反序列化时必须有序列化对象的.class文件
6.多次序列化同一对象,只有第一次会序列化为二进制,都需序列化只保存版本号
项目技巧
项目配置文件要与源码分离(不编译成.class文件)方便后续升级-升级直接改配置文件就行

浙公网安备 33010602011771号