流对象
1.IO流
集合与IO流的交集
Properties
Properties 类代表一个持久的一组属性。
Properties`可以保存到一个流或从流加载。属性列表中的每个键及其对应的值是一个字符串。
-
setProperty(String key, String value)
底层还是调用put方法 -
getProperty(String key)
搜索的属性指定的键在此属性列表中。与IO流相结合的方法:
void load(InputStream|Reader)
void store(OutputStream| str描述)
在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)
分类:按照数据的流向分为
输入流:读数据 输出流:写数据
分类:按照数据类型来分
字节流: 字节输出流;字节输入流
字符流:字符输入流;字符输出流
1.1字节流
超类:Inputstream 表示字节输入流的所有类的超类,子类名称都是以其作位后缀
超类:Outputstream 表示字节输入流的所有类的超类,子类名称都是以其作位后缀
input用来读数据,output用来写数据
注意这里的读写数据是以内存的视角来看的 //从内存输出到磁盘就是写数据,从磁盘输入到内存就是读数据
1.1.1字节流的子类
Fileoutputstream(“地址”) :创建字节输出流对象,让对象指向文件地址的磁盘区域
```
write(int|byte[]|byte[],int off,int len)
一次写一个字节|一次写一个字节数组|一次写一个自定义长度的字节数组
```
FileInputstream(“地址”) :通过打开与实际文件的链接创建一个对象
read(空|byte[]|)
一次读一个字节|一次读一个字节数组|
字节缓冲流
因为原生的字节流读写的时候直接与磁盘交互,如果一次读的字节数组长度较小的话就会多次打开关闭磁盘,消耗时间性能
用字节缓冲流读取文件,读取文件的时候先会将读数的数据缓存到字节缓冲流的内置8129字节的缓冲区中,如果满了才会与磁盘交互一次,
1.2字符流
中文如果用GBK编码一次占一个字节,如果用UTF-8一次占3个字节,编码getbytes() 解码:string()
由于字节流操作中文不是很方便,所以java就提供了字符流
超类:Reader:字符输入流的抽象类,子类名称都是以其作位后缀
超类:Writer:字符输出流的抽象类,子类名称都是以其作位后缀
1.2.1字符流的子类
-
InputStreamReader是桥字节流和字符流:它读取字节并使用指定的
charset
解码成字符。读数据的两个方式 read(空|char[]) 返回: ac码|读到的个数 如果默认本地编码用简化类FileReader(字符串地址)
-
OutputStreamWriter是桥字节流从字符流:字符写入它编码成字节
charset
指定使用。写数据的五种方式 write(int c|char[]|char[],int off,len|string str|string str,int off,len) 写入一个字符|写入一个字符数组|写入字符数组的一部分|写入一个字符串|写入一个字符串一部分 如果默认本地编码用简化类FileWriter //底层还是用字节流与磁盘交互,
字符缓冲流
因为原生的字节流读写的时候直接与磁盘交互,如果一次读的字节数组长度较小的话就会多次打开关闭磁盘,消耗时间性能
用字符缓冲流读取文件,读取文件的时候先会将读数的数据缓存到字符缓冲流的内置8129字节的缓冲区中,如果满了才会与磁盘交互一次,
特有功能: void newLine() 写一行分隔符换行 —writer
String readline() 读一行文字 ----reader
2.标准输入输出流
2.1
System中有两个静态的成员变量:
public static final InputStream in 标准输入流:通常该流对应键盘输入或由主机环境或者用户指定的另一个输入源
public static final OutputStream out 标准输出流 :通常该流对应显示输出或由主机环境或者用户指定的输出目标
键盘的输入输出就是基于这个实现的
byte[] b1 = new byte[1024];
while ((read= System.in.read(b1))!=-1){
System.out.write(b1);
}
java给我们提供了Scanner类
打印流
-
字节打印流
PrintStream
system.in的对应目标源是控制台,但是可以传文件地址创建新的打印流对象链接指定文件
有自己的特有方法写数据print()
-
字符打印流
PrintWriter
3.对象序列化流和反序列化流
强烈建议每个序列化对象给一个指定的序列化Id
3.1对象序列化流
ObjectOutputStream
将java对象的原始数据类型和图形写入OutputStream,可以使用ObjectInputStream重构对象,可以通过使用流的文件来实现对象的持久存储,如果流是网络套接字流,则可以在另一个主机或者另一个进程重构对象
构造方法:参数(OutputStream out)创建一个写入指定OutputStream的对象序列化流对象
方法:writeObject(obj)
注意:一个对象想要被序列化必须实现Serializable接口(起标记作用)