黑马程序员技术交流社区
标题: 【石家庄校区】缓冲流、转换流、序列化流、Files。Skr [打印本页]
作者: 陈叶_cy 时间: 2018-8-7 11:44
标题: 【石家庄校区】缓冲流、转换流、序列化流、Files。Skr
本帖最后由 小石姐姐 于 2018-8-9 11:37 编辑
第一章 缓冲流
缓冲流的原理:创建流对象时,会创建一个内置默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,提高读写效率。底层是使用基本流(FileXxx)来读写
字节缓冲流
BufferedInputStream 缓冲字节输入流
构造方法 BufferedInputStream(InputStream in)
使用步骤:
[AppleScript] 纯文本查看 复制代码
1.创建FileInputStream对象, 构造方法中绑定要读取的数据源
2.创建BufferedInputStream对象, 构造方法中传递FileInputStream对象, 提高FileInputStream效率
3.使用BufferedInputStream对象中的方法 read(), 读取文件
4.释放资源 close()
BufferedOutputStream 缓冲字节输出流
构造方法 BufferedOutputStream(OutputStream out)
使用步骤:
[AppleScript] 纯文本查看 复制代码
1.创建FileOutputStream对象, 构造方法中绑定要输出的目的地
2.创建BufferedOutputStream对象, 构造方法中传递FileOutputStream对象, 提高FileOutputStream效率
3.使用BufferedOutputStream对象中的方法 write(), 把数据写入到内部缓冲区中
4.使用BufferedOutputStream对象中的方法 flush(), 把内部缓冲区中的数据,刷新到文件中
5.释放资源(会先调用flush方法刷新数据, 第4步可以省略)
字符缓冲流
BufferedReader 缓冲字符输入流
[AppleScript] 纯文本查看 复制代码
构造方法 BufferedReader(Reader in)
特有方法 String readLine():读一行文字
BufferedWriter 缓冲字符输出流
[AppleScript] 纯文本查看 复制代码
构造方法BufferedWriter(Writer out)
特有方法 void newLine():写一行行分割符
第二章 转换流
编码:按照某种规则将字符存储到计算机中
解码:将存储在计算机中的二进制数按照某种规则解析显示
字符集:ASCII字符集—ASCII编码
GBK字符集—GBK编码
Unicode字符集—UTF8编码、UTF16编码、UTF32编码
ANSI:表示使用系统默认编码表
乱码原因: 读写编码不一致
InputStreamReader类(Reader子类,字节到字符流的桥梁)
[Java] 纯文本查看 复制代码
InputStreamReader(InputStream in):创建一个使用默认字符集的字符流
InputStreamReader(InputStream in, String charsetName):创建一个使用指定字符集的字符流
OutputStreamReader类(Writer子类,字符流到字节流的桥梁)
[Java] 纯文本查看 复制代码
OutputStreamReader(OutputStream out):创建一个使用默认字符集的字符流
OutputStreamReader(OutputStream out, String charsetName):创建一个使用指定字符集的字符流
第二章 序列化
序列化:内存中的对象转换为字节序列, 以流的方式写入到磁盘的文件中
反序列化: 磁盘文件中的字节序列, 以流的方式读取到内存中变成对象
对象序列化流:ObjectOutputStream类
构造方法:ObjectOutputStream(OutputStream out)
特有方法:void writeObject(Object obj):将对象写出
对象反序列化流:ObjectInputStream类
构造方法:ObjectInputStream(InputStream in)
特有方法:void readObject():读取对象
transient瞬态关键字:避免属性序列化
static 修饰的成员变量属于类不属于对象, 所以不能序列化
transient 修饰的成员变量, 不能被序列化
如果对象的某个属性不希望被序列化, 可以使用transient修饰, 这样就不会被对象流写到文件中
注意:
被读写的对象的类, 必须实现 java.io.Serializable 接口, 否则会抛出NotSerializableException
该类的所有属性也都必须是可序列化的. (实现 java.io.Serializable 接口)
如果某个属性不需要序列化, 则需要用 transient 修饰为瞬态的
如果要将集合序列化, 那么集合中存储的对象也必须是可序列化的
打印流PrintStream
PrintStream特点:
1. 只有输出流, 没有输入流
2. PrintStream永远不会抛出IOException
3. 有特殊方法 print(), println(), 可以输出任意类型的值
java.io.PrintStream类: 字节打印流
构造方法:
[Java] 纯文本查看 复制代码
PrintStream(File file): 创建字节打印流, 输出到一个文件
PrintStream(OutputStream out): 创建字节打印流, 输出到一个字节输出流
PrintStream(String fileName): 创建字节打印流, 输出到一个文件路径
注意事项:
如果用 write() 方法, 会查编码表
如果用 print(), println(), 则原样输出
-
IO流框架体系结构.png
(29.47 KB, 下载次数: 6)
作者: mljqqh 时间: 2018-8-7 12:59
哥们 这个视频可以给我看看么
作者: 小石姐姐 时间: 2018-8-7 14:31
不好意思,这个视频没有办法外传,有意向学习的话可以看黑马官网上的,或者去学校咨询都行.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |