字符流(操作的是文本文件)
1)编码问题
2)认识文本和文本文件
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)
文件时byte byte byte...的数据序列
文本文件是文本(char)序列按某种编码方案序列化为byte的存储结构
3)字符流(Reader Writer)
字符的处理,一次处理一个字符
字符的底层任然是基本的字节序列。
InputStreamReader 完成byte流解析为char流,按照编码解析(默认项目编码)
OutputStreamWriter 提供char流到byte流,按照编码处理
InputStreamReader isr=new InputStreamReader(new FileInputStream(File file));
OutputStreamWriter isw=new OutputStreamWriter(new FileOutputStream(File file));
FileReader/FileWriter 直接操作文件(不能设定编码)
FileReader fr=new FileReader(File file);
FileWriter fw=new FileWriter(File file);
字符流的过滤器
BufferedReader --->readLine 一次读一行(不能识别换行)
BufferedWriter/PrintWriter -->写一行
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStreamReader(File file)))
BufferedWriter bw=new BufferedWriter(new InputStreamWriter(new FileInputStreamWriter(File file)))
PrinterWriter pw=new PrinterWriter(File file);
3.对象的序列化,反序列化
1)对象序列化,就是将Object转换成byte系列,反之叫对象的反序列化。
2)序列化流(ObjectOutputStream)---->writeObject()
反序列化流(ObjectInputStream)--->readObject()
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(File file));
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(File file));
3)序列化接口(Serializable)
对象必须实现序列化接口,才能进行序列化,否则会出现异常,这个借口,没有任何方法,只是一个标 准
4) transient 修饰的元素不会进行jvm默认序列化,也可以自己完成这个元素的序列化
可以在类中重写writeObject 和readObject
private transient int age;//不希望被jvm进行默认序列化的元素。
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException{
s.writeDefaultObject();
s.write(age);
}
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException {
s.defaultReadObject()
this.age=s.readInt()
}
5)序列化 父类如果实现了序列化接口,子类就不用实现序列化接口了
对子类对象进行反序列化操作时,如果其父类没有实现序列化接口,那么其父类的构造函数会被 调用
1)编码问题
2)认识文本和文本文件
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)
文件时byte byte byte...的数据序列
文本文件是文本(char)序列按某种编码方案序列化为byte的存储结构
3)字符流(Reader Writer)
字符的处理,一次处理一个字符
字符的底层任然是基本的字节序列。
InputStreamReader 完成byte流解析为char流,按照编码解析(默认项目编码)
OutputStreamWriter 提供char流到byte流,按照编码处理
InputStreamReader isr=new InputStreamReader(new FileInputStream(File file));
OutputStreamWriter isw=new OutputStreamWriter(new FileOutputStream(File file));
FileReader/FileWriter 直接操作文件(不能设定编码)
FileReader fr=new FileReader(File file);
FileWriter fw=new FileWriter(File file);
字符流的过滤器
BufferedReader --->readLine 一次读一行(不能识别换行)
BufferedWriter/PrintWriter -->写一行
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStreamReader(File file)))
BufferedWriter bw=new BufferedWriter(new InputStreamWriter(new FileInputStreamWriter(File file)))
PrinterWriter pw=new PrinterWriter(File file);
3.对象的序列化,反序列化
1)对象序列化,就是将Object转换成byte系列,反之叫对象的反序列化。
2)序列化流(ObjectOutputStream)---->writeObject()
反序列化流(ObjectInputStream)--->readObject()
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(File file));
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(File file));
3)序列化接口(Serializable)
对象必须实现序列化接口,才能进行序列化,否则会出现异常,这个借口,没有任何方法,只是一个标 准
4) transient 修饰的元素不会进行jvm默认序列化,也可以自己完成这个元素的序列化
可以在类中重写writeObject 和readObject
private transient int age;//不希望被jvm进行默认序列化的元素。
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException{
s.writeDefaultObject();
s.write(age);
}
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException {
s.defaultReadObject()
this.age=s.readInt()
}
5)序列化 父类如果实现了序列化接口,子类就不用实现序列化接口了
对子类对象进行反序列化操作时,如果其父类没有实现序列化接口,那么其父类的构造函数会被 调用