java - java可序列化对象可以在不同的类加载器之间传递吗?

标签 java classloader serializable

最近在学习java程序语言,对java的序列化很好奇,也有一点疑惑。

Can java serializable objects pass between different classloaders? What's the theory?

最佳答案

仅通过实现 Serialized 接口(interface)将不允许您“在不同的类加载器之间传递”。您需要编写代码将序列化对象持久保存到磁盘,然后在另一个类加载器(进程)上将其反序列化。这是一个例子,取自http://www.javapractices.com/topic/TopicAction.do?Id=57 :

    Car car = new Car();
    ....

    //serialize an object called it car to a file called car.ser.
    try (
      OutputStream file = new FileOutputStream("car.ser");
      OutputStream buffer = new BufferedOutputStream(file);
      ObjectOutput output = new ObjectOutputStream(buffer);
    ){
      output.writeObject(car); // this call writes file to disk
    }  
    catch(IOException ex){
      logger.log(Level.SEVERE, "Cannot perform output.", ex);
    }

要反序列化另一端/类加载器/jvm 进程上的对象,您可以执行以下操作:

 try(
      InputStream file = new FileInputStream("car.ser");
      InputStream buffer = new BufferedInputStream(file);
      ObjectInput input = new ObjectInputStream (buffer);
    ){
      //deserialize the List
      Car car = (Car)input.readObject();
      //display its data
      System.out.println("Recovered Car: " + car);

    }
    catch(ClassNotFoundException ex){
      logger.log(Level.SEVERE, "Cannot perform input. Class not found.", ex);
    }
    catch(IOException ex){
      logger.log(Level.SEVERE, "Cannot perform input.", ex);
    }

编辑: 为了获取序列化文件并反序列化它们,您可以使用 WatchService

关于java - java可序列化对象可以在不同的类加载器之间传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32492877/

相关文章:

java - Weblogic 类加载器多次加载类

java - Map<String,Class< 的声明有问题吗?扩展序列化>>

java - REST和JSF : Library to use? 如何解决?

java - 无法使用 ant build.xml 文件构建 webdriver java 代码

java - 静态 block 之间的对象依赖关系如何解决?

java - 无效类异常 : please help getting these errors

c# - 具体 C# 类中是否需要可序列化属性?

java - 继承的 try-catch 问题 (Java)

java - eclipse Windows 64位打不开

java - 从 jar 内的绝对路径加载 Java 资源