实体类:User
package org.chinasoft.io.serial;import java.io.Serializable;public class User implements Serializable { private static final long serialVersionUID = 1L;
private String id;
private String name;
public User(String id, String name) {
this.id = id;
this.name = name;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "id=" + id + ", name=" + name;
}
}
序列化对象的类:Serial
package org.chinasoft.io.serial;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;public class Serial {
private ObjectInputStream ois;
private ObjectOutputStream oos;
private Set<User> users;
public Serial(File file) throws FileNotFoundException, IOException {
if(!file.exists()) {
file.createNewFile();
}
users = new HashSet<User>();
try {
ois = new ObjectInputStream(new FileInputStream(file));
} catch (Exception e) {
}
oos = new ObjectOutputStream(new FileOutputStream(file));
}
/**
* 写对象的的操作
*
*/
public void write() {
User u1 = new User("001", "zhangsan");
User u2 = new User("002", "lisi");
users.add(u1);
users.add(u2);
try {
oos.writeObject(users);
System.out.println("写对象操作开始...");
} catch (IOException e1) {
e1.printStackTrace();
}
}
/**
* 读取对象的操作
*
*/
public void read() {
Set<User> users = null;
try {
System.out.println("读对象操作开始...");
users = (Set<User>)ois.readObject();
Iterator<User> iter = users.iterator();
while(iter.hasNext()) {
User u = iter.next();
System.out.println(u);
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
System.out.println("OK 操作完成...");
System.out.println("Set<User> : " + users);
}
}
}
测试类:TestWriteRead
package org.chinasoft.io.serial;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;public class TestWriteRead {
public static void main(String[] args) throws FileNotFoundException, IOException {
String path = System.getProperty("user.dir")
+ "/src/org/chinasoft/io/serial/data";
File file = new File(path);
Serial ser = new Serial(file);
ser.write();
ser.read();
}}测试类:TestReadpackage org.chinasoft.io.serial;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;public class TestRead {
public static void main(String[] args) throws FileNotFoundException, IOException {
String path = System.getProperty("user.dir")
+ "/src/org/chinasoft/io/serial/data";
File file = new File(path);
Serial ser = new Serial(file);
ser.read();
}}
问题:先运行TestWriteRead.java 测试程序通过对象序列化流将保存有两个User对象的Set集合保存到本地文件,以进行持久化操作;此时打开data文件,里面是有数据的。再次运行TestRead.java测试程序通过对象序列化流读取该Set对象,当执行下面代码,调用Serial构造时候:
Serial ser = new Serial(file);
执行oos的初始化,完成之后本地data丢失,问什么啊?
oos = new ObjectOutputStream(new FileOutputStream(file));而且先前保存的对象根本就读不出来(报错),初始化该oos对象输出流而且会清空原先保存的Set集合对象,这是为什么呢?
希望知道的朋友给予解答,先谢谢了。
package org.chinasoft.io.serial;import java.io.Serializable;public class User implements Serializable { private static final long serialVersionUID = 1L;
private String id;
private String name;
public User(String id, String name) {
this.id = id;
this.name = name;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "id=" + id + ", name=" + name;
}
}
序列化对象的类:Serial
package org.chinasoft.io.serial;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;public class Serial {
private ObjectInputStream ois;
private ObjectOutputStream oos;
private Set<User> users;
public Serial(File file) throws FileNotFoundException, IOException {
if(!file.exists()) {
file.createNewFile();
}
users = new HashSet<User>();
try {
ois = new ObjectInputStream(new FileInputStream(file));
} catch (Exception e) {
}
oos = new ObjectOutputStream(new FileOutputStream(file));
}
/**
* 写对象的的操作
*
*/
public void write() {
User u1 = new User("001", "zhangsan");
User u2 = new User("002", "lisi");
users.add(u1);
users.add(u2);
try {
oos.writeObject(users);
System.out.println("写对象操作开始...");
} catch (IOException e1) {
e1.printStackTrace();
}
}
/**
* 读取对象的操作
*
*/
public void read() {
Set<User> users = null;
try {
System.out.println("读对象操作开始...");
users = (Set<User>)ois.readObject();
Iterator<User> iter = users.iterator();
while(iter.hasNext()) {
User u = iter.next();
System.out.println(u);
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
System.out.println("OK 操作完成...");
System.out.println("Set<User> : " + users);
}
}
}
测试类:TestWriteRead
package org.chinasoft.io.serial;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;public class TestWriteRead {
public static void main(String[] args) throws FileNotFoundException, IOException {
String path = System.getProperty("user.dir")
+ "/src/org/chinasoft/io/serial/data";
File file = new File(path);
Serial ser = new Serial(file);
ser.write();
ser.read();
}}测试类:TestReadpackage org.chinasoft.io.serial;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;public class TestRead {
public static void main(String[] args) throws FileNotFoundException, IOException {
String path = System.getProperty("user.dir")
+ "/src/org/chinasoft/io/serial/data";
File file = new File(path);
Serial ser = new Serial(file);
ser.read();
}}
问题:先运行TestWriteRead.java 测试程序通过对象序列化流将保存有两个User对象的Set集合保存到本地文件,以进行持久化操作;此时打开data文件,里面是有数据的。再次运行TestRead.java测试程序通过对象序列化流读取该Set对象,当执行下面代码,调用Serial构造时候:
Serial ser = new Serial(file);
执行oos的初始化,完成之后本地data丢失,问什么啊?
oos = new ObjectOutputStream(new FileOutputStream(file));而且先前保存的对象根本就读不出来(报错),初始化该oos对象输出流而且会清空原先保存的Set集合对象,这是为什么呢?
希望知道的朋友给予解答,先谢谢了。
解决方案 »
- java操作word模版问题???
- 全部家产探讨笔记整理(顶者有分)
- 菜鸟问题-继承
- 输入输出流的问题
- 如何设置单旋钮按钮
- 除在定义上不同外,抽象类与接口还有什么区别,我是新人,怎样才能得到专家分
- 谁能告诉我用Java写程序与其他编程语言相比真正的优势好处在那里 ,真是学的一头雾水
- 大家看看http://www-900.ibm.com/developerWorks/java/l-oicq/index.shtml好不好?
- 请问哪里能搞到将JAVA的CLASS文件反编译成源码的工具?给100分呀!!!
- java enter登录键盘事件
- myeclipse 中怎么给main中args 赋值
- 替换源文件中的文本并将修改存储到新的文件中
导致的?