JAVA编程技术基础:探究JAVA串行化的细节
序列化是java.io包的一部分,用来把一个对象转换成一串字节。在序列化的过程中,一个实体被转换成一系列表示对象的字节,这些字节可以被写入文档以备后用,通过网络连接传输到其他程序,用于复制初始对象,等等。
如果需要序列化一个类,那么必须对该类执行java.io.Serializable,并提供一个无争议的构造函数。Serializable接口不需要任何方法,所以你的类不需要任何其他东西。
如果你有一个简单的类似bean的类,并且这个类只把原始的、可序列化的对象作为属性,那么你不需要做任何其他的事情。当您需要将一个对象序列化为一系列字节或从一系列字节开始序列化时,Java可以处理所有细节。
您可能会遇到的两个问题
序列化可能会变得更加复杂。对于序列化,通常会遇到两个常见问题:类版本和复杂对象。
版本可能是你会遇到的第一个问题。例如,如果在将实体序列化到磁盘后将方法或属性添加到类中,然后希望将序列化的实体存储回内存中,则会出现java.io.InvalidClassException。发生此错误是因为类的版本已更改。这个问题是可以解决的,但是你得花点时间。更具体地说,是检查Java对象的序列化细节。
第二个可能的问题是,你的类是否有一些虚拟机不知道如何序列化的状态信息。在这种情况下,您可以通过以下两种方式来完成读写类实例的任务。
private void writeObject(Java . io . object output stream out)
抛出IOException
private void read object(Java . io . object input stream in)
抛出io exception,ClassNotFoundException
注意,这两个方法是私有的,序列化是特殊的。如果想了解情况,请看一下java.io.ObjectOutputStream和java.io.ObjectInputStream的源代码,一定要看一下javadoc关于java.io.Serializable的内容
下面是一个完整的序列化示例,您可以尝试一下:
导入Java . io . file inputstream;
导入Java . io . file output stream;
导入Java . io . eof exception;
导入Java . io . io exception;
导入Java . io . objectinputstream;
导入Java . io . object output stream;
导入Java . io . serializable;
导入Java . util . random;
public class SerializableTipHelper {
private static final String STORE _ FILE = " bytes . out ";
private static final boolean VERBOSE = true;
public static void main(String[]args){
if(args . length!= 1 && args.length!= 2){
system . out . println(" use:SerializableTipHelper(read | write)
[numberToWrite]");
退货;
}
if ( args[0]。equals(" write ")){
try {
write(integer . parse int(args[1]);
}
catch(io exception e){
e . printstacktrace();
}
}
//默认为read
else {
try {
read();
}
catch(io exception e){
e . printstacktrace();
}
catch(ClassNotFoundException e){
e . printstacktrace();
0条评论