在Java中反序列化ArrayList



我有我自己的小序列化器类

package mypackage.shared;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Serializer {
    static final String HEXES = "0123456789ABCDEF";
    public static String serialize(Object o) throws IOException {
        ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
        ObjectOutputStream os = new ObjectOutputStream(stream);
        os.writeObject(o);
        os.close();
        return toHex(stream.toByteArray());
    }
    public static Object deserialize(String hexString)  throws IOException, ClassNotFoundException {
        byte[] serializedBytes = toByteArray(hexString);
        ByteArrayInputStream bis = new ByteArrayInputStream(serializedBytes);
        ObjectInputStream ois = new ObjectInputStream(bis); 
        Object o = null;
        o = ois.readObject();
        ois.close(); 
        return o;
    }
    public static String toHex( byte [] raw ) {
        if ( raw == null ) {
            return null;
        }
        final StringBuilder hex = new StringBuilder( 2 * raw.length );
        for ( final byte b : raw ) {
            hex.append(HEXES.charAt((b & 0xF0) >> 4))
            .append(HEXES.charAt((b & 0x0F)));
        }
        return hex.toString();
    }
    private static byte[] toByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i+1), 16));
        }
        return data;
    }
}

它对我的一些自制物品很有用。然而,一旦我有了这些对象的数组列表,它就不能反序列化它们了。知道为什么吗?我发现很难调试,因为readObject()只是失败

如果序列化不工作,则意味着某个对象不可序列化。

尝试反序列化一个只包含一个home对象的数组列表,并对所有home对象进行反序列化

最新更新