0

我想在 GWT 中序列化一个对象,它继承了这段代码中的其他类型的对象。我的结果应该是System.out.print

import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream; 
import com.google.gwt.user.client.rpc.IsSerializable;  
import spa.shared.storages.RouteStorage;

public class RouteStorageHelper implements IsSerializable {

    public RouteStorageHelper() {

    }

    public void storeRoutes(RouteStorage routeStorage) {

        ByteArrayOutputStream baos;
        ObjectOutputStream out;
        baos = new ByteArrayOutputStream();

        try {
            out = new ObjectOutputStream(baos);
            out.writeObject(routeStorage);
            //byte[] byteArray=baos.toByteArray();
            out.close();
            byte[] serializedGraph=baos.toByteArray();
            System.out.println(serializedGraph);


        } catch (Exception sqle) {
            System.out.print(sqle);
        }
    }

但我得到的只是一个NotSerializableException,它告诉我们,有些东西没有被序列化。我无法理解,因为其他子类对象也得到了IsSerializable接口。

具有此接口的其他类:RouteStorage, Storage, Patient, Employee等...我也使用的东西:String, Integer, HashMap, ArrayList, Date (java.util)和两个enums Status and Qualifikation.

这些类中是否有任何不可序列化?GWT 有什么不同吗?

4

2 回答 2

1

在客户端进行序列化 GWT 将 Java 类转换为 JavaScript。为此,它对您可以使用的类有一些限制。并非所有标准 java 类都不受支持,而是有限的一组。在 GWT 文档中查看更多相关信息:Serializable Types

该接口IsSerializable是旧 GWT 版本的残余,您可以只使用标准Serializable接口,这也使 Java 在服务器端可序列化。

于 2013-08-01T12:08:53.660 回答
1

是的,这里您使用基于 java.io.Serializable 接口的 java 序列化。GWT 接口 IsSerializable 不扩展 java.io.Serializable,因此从 java 序列化器的角度来看,您的对象不是可序列化的

于 2013-08-01T12:02:39.530 回答