FileReader读取字符文件数据的时候
默认采用当前java文件对应的字符集进行解码
FileWriter写出字符文件数据的时候
默认采用当前java文件对应的字符集进行编码
怎么解决读取其他字符集的数据--》通过转化流
处理流-装饰对象
InputStreamReader
OutputStreamWriter
1)reader
abstract void close()
关闭该流并释放与之关联的所有资源。
int read()
读取单个字符。
intread(char[] cbuf)
将字符读入数组。
2)writer
abstract void close()
关闭此流,但要先刷新它。
abstract void flush()
刷新该流的缓冲。
voidwrite(char[] cbuf)
写入字符数组。
write(intc)
voidwrite(String str)
转换流(字节流———》字符流)
主要作用:把字节【整数】流转换为字符【字符】流(不能字符转字节流!-设置编码解码字符集)
1、OutputStreamWriter
a)可以设置编码字符集
b)进行字节输出流转字符输出流
2、InputStreamReader:字节输入流---转--》字符输入流
a)可以设置解码字符集
b)进行字节输入流转字符输入流
注意点
1)转换流都带有缓冲区-不能设置大小,输出数据一定要刷新
2)关闭处理流时-会自动关闭所包装的流
节点流(真实对象):连接到数据源提供基本输入输出功能
处理流(装饰对象):包装其他流-增加附加功能,提高性能。
缓冲流-》处理流
作用:对其他流-增加输入输出缓冲区-提高输入输出性能(针对大量数据处理-速度块)。
缓存字节流
bufferedInputstream
bufferedOutputstream
缓存字符流
bufferedReader
bufferedWriter
处理流给其他流增加功能的步骤
new处理流(其他流);
处理流.read
处理流.write
增加的功能
1)增加输入输出缓冲区-》提高性能
2)新增api;要使用自己的api,不能面向超类型Reader和Writer编程
bufferedReader
增加:eadLine功能:读取一行数据
bufferedWriter
增加: newLine功能:写出一个换行符
计算机的文件数据
字节文件:通过文本编辑器打开看不懂文字的文件。--》图片,视频,声音 png,gif,mp3,avi
字符文件:可以通过文本编辑器打开,可以看懂文字的文件。-》文本文件-》.java,.txt
字节流:a)处理字节数据 b)处理字符数据-》需要手动编码和解码
字符流:b)处理字符数据-》自动编码和解码
作用:把程序数据 传输到 数据源长久存储。
1、序列化概念
a)序列化(输出):把程序中的数据 (基本类型,引用类型)以【字节数据】写出 到一个数据源
b)反序列化(输入):把数据源序列化的数据 【字节数据】 读取到 程序中的数据(基本类型,引用类型)
序列化的流-->处理流
a)【基本类型】加【字符串】序列化
DataInputStream 可以读入基本类型加字符串的字节输入流
DataOutputStream 可以写出基本类型加字符串的字节输出流
增加了api:使用该api-不能面向超类型InputStream和OutputStream编程
write基本类型名 基本类型
writeUtf字符串
read基本类型名 基本类型
readUtf字符串
b)【基本类型】加【对象类型】序列化
ObjectInputStream 可以读入基本类型加字符串还有对象的字节输入流
ObjectoutputStream 可以写出基本类型加字符串还有对象的字节输出流
增加了api:使用该api-不能面向超类型InputStream和OutputStream编程
write基本类型名 基本类型
writeUtf 字符串
writeObject 对象类型
read基本类型名 基本类型
readUtf 字符串
readObject 对象类型
序列化注意点
1)写出数据和读取数据的顺序必须一致