ObjectOutputStream和ObjectInputStream的简单使用
使用ObjectOutputStream往文本写内容时,首先在文本里面标记开始,然后是内容,最后加上结束标示。如果想再次往文本里面添加内容的话,就要加在开始标示之后和结束标示之前,不然会读取不到写入的内容。
1 import java.io.FileInputStream; 2 import java.io.FileOutputStream; 3 import java.io.ObjectInputStream; 4 import java.io.ObjectOutputStream; 5 import java.io.Serializable; 6 7 8 public class ObjectBuffer { 9 public static void main(String[] args) throws Exception { 10 ObjectOutputStream oos = new ObjectOutputStream(new 11 FileOutputStream("src/TXT/Z.txt",false));//工程里面的路径 12 oos.writeObject(new User("java",16)); 13 oos.writeObject(new User("C++",18)); 14 oos.writeObject(new User("c语言",22)); 15 oos.writeObject(null); //最后添加一个空对象,作为后面读取内容的判断 16 oos.flush(); 17 oos.close(); 18 //第一次使用ObjectOutputStream往文本写内容时,就会自动在文本内容最后打上结束标示。 19 //当再次使用ObjectOutputStream往里面写入内容时,内容加在上次内容的后面,当使用ObjectInputStream读取内容时, 20 //因为第一次写入内容时,在后面加上了结束标示,将会读取不到第二次写入的内容。 21 22 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src/TXT/Z.txt")); 23 User u; 24 while((u = (User) ois.readObject()) != null){ 25 System.out.println(u); 26 } 27 ois.close(); 28 } 29 } 30 class User implements Serializable{ 31 static int n = 0; 32 private String name; 33 private int age; 34 public String getName() { 35 return name; 36 } 37 public void setName(String name) { 38 this.name = name; 39 } 40 public int getAge() { 41 return age; 42 } 43 public void setAge(int age) { 44 this.age = age; 45 } 46 public User(String name, int age) { 47 super(); 48 n++; 49 this.name = name; 50 this.age = age; 51 } 52 public User() { 53 super(); 54 } 55 @Override 56 public String toString() { 57 n--; 58 return "User [name=" + name + ", age=" + age + "]"; 59 } 60 }
输出结果:
User [name=Java, age=16]
User [name=C++, age=18]
User [name=C语言, age=22]