java问题 如图,集合序列化的报错要怎么改呢?写入文件和读取对象的代码都在图里了,哪写错了,求大神
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java问题 如图,集合序列化的报错要怎么改呢?写入文件和读取对象的代码都在图里了,哪写错了,求大神相关的知识,希望对你有一定的参考价值。
首先ArrayList继承了AbstractList类,实现了List,RandomAccess,Cloneable以及Serializable接口。下面先来看一下Serializable接口,即序列化接口:
首先看一下什么是序列化:序列化的定义是一种将对象以一连串的字节描述的过程,在java中万事万物皆对象,在分布式环境中经常需要将对象从一段网络传到另一端网络。
来想下如果不使用序列化来传输对象会怎么样,结果自然是会报错。运行时报错:java.io.NotSerializableException,原因就是没有实现序列化接口。可是为什么要序列化呢,不能像在内存一样把对象作为参数传递呢?我再百度贴吧尚学堂吧看到一个解释感觉很有道理,引用过来:
这里首先要确定一件事,内存中将对象作为参数传递其实只是传递对象的引用(指针)。就像是继承一样,并非是将父类对象保存在子类对象之中,而是子类对象包含了父类对象的引用,在java内部继承是通过隐式的组合实现的。子类对象中会保存一个实例对象的引用super,引用指向父类。实际的方法调用中,java会优先在当前类对象中寻找名称相同的方法,如果没有,会根据super引用到父类对象中去寻找,所以,如果父类方法在子类中得到了重写,java会调用子类的方法,而不会调用被重写的父类的方法,这也是多态的实现机制。
所以,内存中传来传去的都是地址,如果直接将其存库,然后内存经过变化,取出来的引用肯定是变了,而java的优势是跨平台,在分布式的环境中,传递对象是非常普遍的,既然涉及到了传输,势必有相应的协议,序列化就是为了解决这个问题而出来的。 完。
现在几乎所有的应用程序都涉及网络I/O和磁盘I/O,而数据传输时都是以字节为单位的,所以所有的数据都必须能够序列化为字节。在Java中数据要被序列化为字节流,存储在文件中或在网络上传输,必须继承Serializable接口。
序列化的用处:永久性保存对象,保存对象的字节序列到本地文件或者数据库中、通过序列化以字节流的形式使对象在网络中进行传递和接收、通过序列化在进程之前传递对象。
然后看一下Serializable接口的声明:public interface Serializable ,由此可见序列化接口没有方法或者是字段,所以更像是一个标志,标识可序列化。 参考技术A
Person类中添加以下属性
private static final long serialVersionUID = -8817344729308165483L;
Person类中添加空参构造器
追问public Person()
大神先给您采纳了,能问下为什么加上private static final long serialVersionUID = -8817344729308165483L; 就不会报错了呢,就一个常量而已,好神奇
追答serialVersionUID 是序列化识别号, 反序列化时,需要比较serialVersionUID是否一致, 你可以百度一下,有更详细的介绍.
追问好的,谢谢
本回答被提问者采纳今天在linux系统下weblogic部署环境,启动程序报错,如图“
问题解决:启动startWebLogic.sh 添加-Djava.io.tmpdir=$DOMAIN_HOME/tmp
注意看你的报错信息could not create disk store. Initial cause was /tmp/ ......(Permision denied)权限有问题。
记得 不光是解决问题,还要学会做trouble shooting。 参考技术A 开机 (4142) 死机 (3986) 重新启动 (3830) 蓝屏 (4200) 黑屏 (3756) 重装系统 (4526) 格式化 (4388) 硬盘 (4117) 注册表 (3531) C盘 (4464)追问
这?
以上是关于java问题 如图,集合序列化的报错要怎么改呢?写入文件和读取对象的代码都在图里了,哪写错了,求大神的主要内容,如果未能解决你的问题,请参考以下文章
报错c(179) : error C2275: 'LNODE' : illegal use of this type as an expression等,哪里错了,怎么改呢
今天在linux系统下weblogic部署环境,启动程序报错,如图“