Java 对象序列化查询
我目前正在学习Java中的对象序列化,据我所知,甚至可以序列化实现可序列化接口的对象,并通过套接字将其传递给其他程序Java 对象序列化查询,java,serialization,Java,Serialization,我目前正在学习Java中的对象序列化,据我所知,甚至可以序列化实现可序列化接口的对象,并通过套接字将其传递给其他程序 class Mammal implements Serializable { int legs = 4; } public class ObjectSerial { public static void main(String[] args) { try { FileOutputStre
class Mammal implements Serializable
{
int legs = 4;
}
public class ObjectSerial
{
public static void main(String[] args)
{
try
{
FileOutputStream fo = new FileOutputStream("mammal.obj");
ObjectOutputStream oo = new ObjectOutputStream(fo);
Mammal m = new Mammal();
oo.writeObject(m);
oo.close();
}
catch(IOException e){}
//read object
try
{
FileInputStream fi = new FileInputStream("mammal.obj");
ObjectInputStream oo = new ObjectInputStream(fi);
Mammal m = (Mammal)oo.readObject();
System.out.println(m.legs);
}
catch(IOException e){}
catch(ClassNotFoundException cnf){}//this exception must also be caught
}
}
让我困惑的是,当我想在服务器端检索类成员时,例如,我将如何“到达”;序列化的对象
try
{
FileInputStream fi = new FileInputStream("mammal.obj");
ObjectInputStream oo = new ObjectInputStream(fi);
Mammal m = (Mammal)oo.readObject();
System.out.println(m.legs);
}
catch(IOException e){}
catch(ClassNotFoundException cnf){}//t
换句话说。在另一个程序中,编译器会告诉我找不到符号
希望这个问题听起来不是很无知。
只是确认一下……我如何在不同的程序中访问Serializedobject的变量
关于当您在服务器上反序列化您的哺乳动物.obj时,您需要在类路径上有哺乳动物.class。哺乳动物所依赖的任何对象也依赖于类路径。这是唯一的方法,也是序列化的缺点。它以二进制方式将客户机和服务器连接起来。当您在服务器上反序列化您的Mayman.obj时,您需要在类路径上有Mayman.class。哺乳动物所依赖的任何对象也依赖于类路径。这是唯一的方法,也是序列化的缺点。它以二进制方式将您的客户机和服务器连接起来。希望此网站能对您有所帮助:
我不能将其强制转换为原始对象,这有点错误,但您需要使用readObject方法来重新创建对象,实现序列化应该会迫使您在您的Mamula对象上执行此操作。希望此站点能对您有所帮助:
我在无法将其强制转换为原始对象方面有点错误,但您需要使用readObject方法来重新创建对象,实现序列化应该会迫使您在Mamula对象上执行此操作。此外,不要忘了添加以下内容:
// Better to let the compiler generate this at first
private static final long serialVersionUID = -1111111L;
并确保每次更改对象中的数据定义(即添加/删除/修改非瞬态字段定义)时都会更改它
写入序列化对象时,serialVersionUID是写入内容的一部分。当它被读回时,它获取该serialVersionUID并将其与类加载器中该类的serialVersionUID进行比较
如果两者不匹配,则表示序列化对象是从与当前加载的类不同的版本生成的,将引发异常。此外,不要忘记添加以下内容:
// Better to let the compiler generate this at first
private static final long serialVersionUID = -1111111L;
并确保每次更改对象中的数据定义(即添加/删除/修改非瞬态字段定义)时都会更改它
写入序列化对象时,serialVersionUID是写入内容的一部分。当它被读回时,它获取该serialVersionUID并将其与类加载器中该类的serialVersionUID进行比较
如果两者不匹配,则表示序列化对象是从与当前加载的类不同的版本生成的,并且将引发异常