JAVA中的对象流
一.对象流的基本介绍
对象流:
- 对象流是一种高级流,可以方便我们将java中的任何对象进行读写操作。
- java.io.objectoutputstream
- 对象输出流,可以将对象转换为一组字节写出。
- java.io.objectinputstream
- 对象输入流,可以读取一组字节转换为原对象,还原为原对象的条件是读取这个字节应该是对象输出流将一个对象转换的字节。
二.对象输出流(写)
1.ObjectOutputStream 提供了writeObject(object obj);oos将对象转换为字节后 将这组字节交给fos写入文本等于写到硬盘, 这个过程称之为“数据持久化”; oos将给定的对象pdd转为一组字节,这个过程称之为“对象序列化”;简单来讲“对象序列化”就是将对象写入文本中,称之为对象"序列化".
2.serializable接口:
objectOutputstream在对象进行序列化时有个要求:需要序列化对象所属的类。必须是实现serializable接口,实现该接口不需要重写任何方法,目的是可序化的一种标识。
3.transient属性:
把不需要序列化的属性忽略掉,这样可以达到对象文件的“减肥目的”.
一.自定义一个Student类实现serializable接口,
public class student implements Serializable{
/**
* serialVersionUID作用:序列化时是为了保持版本
* 的兼容性,意思是在版本升级时反序列化仍保持对象的唯一性
*
* 他又以下两种方式:
* 一个是默认1L,比如:
* private static final long serialVersionUID = 1L;
* 另一个是来自一个64位的哈希段
* private static final long serialVersionUID = 336644671910956990L;
*/
public String name;
public int age;
public char gender;
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;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
@Override
public String toString() {
return "student [name=" + name + ", age=" + age + ", gender=" + gender + "]";
}
}
二.将对象写入“stu.txt”文本中。
public class Objectoutputstream {
public static void main(String[] args) throws IOException {
student pdd=new student();
pdd.setName("潇参数");
pdd.setAge(18);
pdd.setGender('男');
System.out.println(pdd.toString());
//文件输出流
FileOutputStream fos=new FileOutputStream("stu.txt");
//对象输出流
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(pdd);
System.out.println("写入完毕!!");
oos.close();
}
}
三.对象输入流(读)
1.读取一组字节转换为原对象,称为对象的“反序列化”.
2.ObjectInputStream提供了一个方法是readObject()返回一个object对象.
public class Objectinputstream {
public static void main(String[] args) throws IOException, Exception {
//文件输入流
FileInputStream fis=new FileInputStream("stu.txt");
//对象输入流
ObjectInputStream ois=new ObjectInputStream(fis);
student stu=(student) ois.readObject();//相等于object obj=ois.readObject();
System.out.println(stu);
ois.close();
}
}