gpt4 book ai didi

通过 J2ME 或 BlackBerry API 进行序列化

转载 作者:行者123 更新时间:2023-12-04 06:11:35 26 4
gpt4 key购买 nike

是否可以使用 J2ME 或 BlackBerry API 将对象序列化为字符串或字节数组?

谢谢。

最佳答案

我处理对象序列化案例的方式是实现我自己的基础设施来处理所有事情。您在此 API 中没有反射,但您确实有“Class.forName()”,这总比没有好。所以这就是我要做的......

首先,这是我让每个可序列化对象实现的接口(interface):

public interface Serializable {
void serialize(DataOutput output) throws IOException;
void deserialize(DataInput input) throws IOException;
}

serialize() 方法将对象的字段写入 DataOutput 实例,而 deserialize() 方法从 DataInput 实例设置对象的字段。 (这些都是面向数据的 I/O 流使用的普通顶级接口(interface),这让我有更大的灵 active )此外,任何实现此接口(interface)的类都需要有一个默认的无参数构造函数。当然,如果您希望您的序列化类对变化具有鲁棒性,您可能需要相应地选择您的基础数据格式。 (例如,我实现了一个可序列化的哈希表作为底层容器来处理这些情况)

现在,为了实际序列化一个实现这个接口(interface)的类,我有一个看起来像这样的方法:
public static byte[] serializeClass(Serializable input) {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
DataOutputStream output = new DataOutputStream(buffer);
try {
output.writeUTF(input.getClass().getName());
input.serialize(output);
} catch (IOException ex) {
// do nothing
}
return buffer.toByteArray();
}

并反序列化:
public static Serializable deserializeClass(byte[] data) {
DataInputStream input = new DataInputStream(new ByteArrayInputStream(data));
Object deserializedObject;
Serializable result = null;
try {
String classType = input.readUTF();
deserializedObject = Class.forName(classType).newInstance();
if(deserializedObject instanceof Serializable) {
result = (Serializable)deserializedObject;
result.deserialize(input);
}
} catch (IOException ex) {
result = null;
} catch (ClassNotFoundException ex) {
result = null;
} catch (InstantiationException ex) {
result = null;
} catch (IllegalAccessException ex) {
result = null;
}
return result;
}

关于通过 J2ME 或 BlackBerry API 进行序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2449005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com