打印流
什么是打印流
其实在开发中我经常使用到打印流,最常用的就比如,将信息输出到控制台上面,这就是一个默认的打印流
,默认打印地址就是控制台
打印流 PrintStream
常用的构造方法
PrintStream ps = new PrintStream(new FileOutputStream("e.txt"));
常用的方法
//1.不换行打印(可以打印任意类型的值)
ps.print(123);
//2.换行打印(可以打印任意类型的值)
ps.println("123");
改变System.out.print()输出的位置,让它不在控制台输出
PrintStream ps = new PrintStream(new FileOutputStream("e.txt"));
System.setOut(ps);
System.out.print("4567891654");
ps.close();
序列化和反序列化
什么是序列化?
将对象以流的方式保存到文件中
什么是反序列化
将对象从文件中读取到内存中
要想对,对象序列化和反序列化的要求?
1.对象所实现的类必须是实现了Serializable接口的类
2.对象所实现的类最好是自己定义一个Serializable标记,如下
private static final long serialVersionUID = 1L;
如果不定义标记,每一次更改对象所实现的类时,Serializable接口就会重新生成一个ID标记,当你序列化一个对象时,会把序列ID也传到文件中,在反序列化时如果对象所实现的类ID标记不是序列化时的标记,就会产生序列化冲突异常。
3.对象所实现的类中不要有静态属性,静态属性序列化后会将静态属性的值改为初始值
对象所实现的类 —users类
public class Users implements Serializable {
public String name ;
private int age;
private static final long serialVersionUID = 1L;
public Users() {
}
public Users(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
对Users类的实例对象进行序列化和反序列化
public static void main(String[] args) throws IOException, ClassNotFoundException {
Users user = new Users("张三",18);
//序列化
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("c.txt"));
os.writeObject(user);
os.close();
//反序列化
ObjectInputStream is = new ObjectInputStream(new FileInputStream("c.txt"));
Users o = (Users)is.readObject();
is.close();
System.out.println(o.getName()+o.getAge());
}
控制台输出