本帖最后由 第一印象 于 2013-9-21 09:05 编辑
序列化对象时可以将一个装载了对象的集合中的所有对象循环存入文件中,但是反序列化时如何循环读取,一直没得到解决:
序列化代码如下:
- /**
- * 对象流演示
- */
- public static void main(String[] args) {
- //文件输出流
- FileOutputStream fos = null;
- //对象序列化流
- ObjectOutputStream out = null;
- try {
- fos = new FileOutputStream("objectstream.txt");
- out = new ObjectOutputStream(fos);
- List<Person> pList = new ArrayList<Person>();
- pList.add(new Person("张三",25));
- pList.add(new Person("李四",31));
- pList.add(new Person("王五",29));
- for(Person p : pList){
- out.writeObject(p);
- out.flush();
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally{
- //关流
- try{
- if(null != fos)
- fos.close();
- if(null != out)
- out.close();
- }catch(IOException e){
-
- }
- }
- }
复制代码 反序列化代码如下,目前反序列化只能一次一次读,我觉得要是一次性存入一个文件的对象很多就不可能再这么做了,所以有没有循环读取的办法,
我试了API里,ObjectInputStream提供的很多方法基本上都行不通,不可能像读取字符流或字节流那样,通过判断read()方法返回的是不是-1来判断,所以,有什么好办法没:- public static void main(String[] args) {
- //文件输入流
- FileInputStream fis = null;
- //对象反序列化流
- ObjectInputStream in = null;
- try{
- fis = new FileInputStream("objectstream.txt");
- in = new ObjectInputStream(fis);
- //一个一个的读取流对象
- Person p1 = (Person)in.readObject();
- Person p2 = (Person)in.readObject();
- Person p3 = (Person)in.readObject();
- System.out.println(p1.getName() + ":" + p1.getAge());
- System.out.println(p2.getName() + ":" + p2.getAge());
- System.out.println(p3.getName() + ":" + p3.getAge());
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- //关闭流
- try{
- if(null != fis){
- fis.close();
- }
- if(null != in){
- in.close();
- }
- }catch(IOException e){
- e.printStackTrace();
- }
- }
- }
复制代码 Person类:- public class Person implements Serializable{
- private static final long serialVersionUID = 1L;
- private String name;
- private int 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;
- }
- public Person() {
- super();
- }
- public Person(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
- }
复制代码 |