我知道序列化过程但没有实现它。
在我的应用程序中,我已经看到有各种类已经实现了可用于serilizable的接口。考虑下面的课程
public class DBAccessRequest
implements Serializable
{
private ActiveRequest request = null;
private Connection connection = null;
private static Log log = LogFactory.getLog(DBAccessRequest.class);
public DBAccessRequest(ActiveRequest request,Connection connection)
{
this.request = request;
this.connection = connection;
}
/**
* @return Returns the DB Connection object.
*/
public Connection getConnection() {
return connection;
}
/**
* @return Returns the active request object for the db connection.
*/
public ActiveRequest getRequest() {
return request;
}
}
只需在构造函数中设置请求和连接,并为它们设置getter setter。 那么在这里有什么可用于可服用的实施...
答案 0 :(得分:1)
这就是所谓的标记接口;它用于定义可在Java中序列化的类型。来自API:
java.io.Serializable
:实现[this]接口的类启用了类的可序列化。未实现此接口的类将不会将其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
答案 1 :(得分:1)
Layman会说:“Serializable?它是如何告诉Java的,我需要将这个对象分解为字节并安全地存储在其他地方,反之亦然”
答案 2 :(得分:1)
序列化比这更复杂,如果您曾尝试将一些本地变量(如int,long等)保存到流中,那么您可以直接调用它们。
int i=100;
stream.write(i);
关于序列化的事情,每个Serializable对象都有一个 serialVersionUID ,它是唯一到每个可序列化的对象,并通过 reflection + a非常复杂的mechanizem(以防止再次保存对象的相同实例)它会分解对象并将其保存为字节,就像我的例子一样,只有预定义的非常通用的机械化来完成它
这意味着,在您的示例中,它将查看 DBAccessRequest 类 对象检查哪个变量存在以及它们是否也是Serializable它会对它们执行相同的过程,并将它们切换到 Serializable 核心,并将它们保存为字节。
这是解释一个非常复杂,非常有趣且值得研究的过程的一般概念的所有隐喻(你应该查一下):
希望得到这个帮助,
亚当。
答案 3 :(得分:0)
来自Sun:
我们都知道Java平台允许 我们在中创建可重用的对象 记忆。但是,所有这些对象 只有Java虚拟存在才存在 machine1仍在运行。这将是 如果我们创建的对象可以 超出了生命的存在 虚拟机,不是吗?好, 使用对象序列化,您可以 展平你的物品并重复使用它们 有力的方式。
所以我认为将其标记为可序列化的原因是,一旦JVM重新启动并运行,之前使用的数据将被加载并再次使用。这可能很有用,以避免用户在每次加载应用程序时都输入相同的数据。
答案 4 :(得分:0)
Rozer,我想你的意思是为什么这个类被标记为Serializable,除了getter和setter之外没有任何与序列化相关的功能。
该类可能无法直接实现可序列化函数。
我对此没有任何其他解释。