Java序列化

标签 java serialization

我现在正在学习如何使用Java语言进行序列化。我已经阅读了一些有关该主题的帖子和文档,并且尝试做一个简单的示例(如下)

public class SterializeObject implements java.io.Serializable{

        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        private String name;
        private transient int code;

        public SterializeObject (String n, int c){
            name = n;
            code = c;
        }

        public void printAtributes (){
            System.out.println("name: " + name + "; code: " + code);
        }
    }

    public class MainClass {
        public static void main(String[] agrs) {
            SterializeObject ob1 = new SterializeObject("ana", 1);
            SterializeObject ob2 = new SterializeObject("rita", 2);

            try {
                FileOutputStream fileOut = new FileOutputStream("file.data");
                ObjectOutputStream outObj = new ObjectOutputStream(fileOut);
                outObj.writeObject(ob1);
                outObj.writeObject(ob2);
                outObj.close();
                System.out.println("Objects were serialized!");
            } catch (IOException e) {
                e.printStackTrace();
            }

            ArrayList<SterializeObject> list = new ArrayList<SterializeObject>();
            try {
                FileInputStream fileInput = new FileInputStream("file.data");
                ObjectInputStream inputObj = new ObjectInputStream(fileInput);
                Object o;
                try {
                    while ((o = inputObj.readObject()) != null) {
                        list.add((SterializeObject) o);
                    }
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    System.out.println("Erro foi aqui! (1)");
                }

                inputObj.close();
                fileInput.close();
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("Erro foi aqui! (2)");
            }

            for (int i = 0; i < list.size(); ++i) {
                list.get(i).printAtributes();
            }
        }
    }

我创建了一个 Class SterializeObject,它使用两个变量实现 java.io.Serialized:一个 string(名称)和一个 int(代码)是 transient 的。然后,我主要生成该类的两个实例,并尝试将其写入文件中,我已经成功完成了!之后,我尝试用循环读取两个对象..这是我的问题..因为ObjectInputStream没有某种方法来查看我们是否最终。因此,我尝试处理以下条件:(o = inputObj.readObject()) != null

My output is this:
java.io.EOFException
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at MainClass.main(MainClass.java:30)
Objects were serialized!
Erro foi aqui! (2)
name: ana; code: 0
name: rita; code: 0

我得到了对象,但收到错误,因为我认为,正在尝试访问不存在的东西。

有人可以告诉我其他方法吗?

最诚挚的问候。

最佳答案

读取与写入对象数量一样多的对象,或者写入对象列表本身,而不是一个接一个地写入每个对象。

(或者依靠 EOFException 来检测流的结束,但这很难看)。

关于Java序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15788182/

相关文章:

java - 处理无效 REST API 参数的内部 Java 代码最佳实践

java - NullPointerException 导致应用程序立即崩溃

java - ReSTLet客户端如何处理媒体类型的请求?

java - 水平 RecyclerView 中的上一个和下一个按钮

Django:如何将自定义字段序列化为 fixture 并将其加载回来

java - JSON : serialization from python to Java

java - 序列化一个以后可能会改变的java对象

java - 我在哪里可以在线找到包含(大部分)完整的 Java 单元测试套件的开源 Web 应用程序实现?

python - DRF : Serializer for heterogneous list of related models

mysql - WordPress 表单结构序列化/反序列化?