我正在尝试实现 Externalizable 接口以使用 LWUIT-IO 的存储来存储数据。这对于由字符串、布尔值和整数组成的简单对象非常有用。
但是,我有一个由这些类型组成的对象,而且还由上述 Externalizable 对象的 Vector 组成。这似乎弄乱了过程,当我尝试从存储中检索对象时,我什么也没得到。
我假设它就像 Serializable 接口,并且主对象内的 Externalizable 对象是自动处理的。我不确定这是否属实,或者为什么它失败了。
对象内部的对象是:
public class Song implements Externalizable{
String name = "examplesongname";
public void externalize(DataOutputStream out) throws IOException {
out.writeUTF(name);
}
public void internalize(int version, DataInputStream in) throws IOException {
name = in.readUTF();
}
public String getObjectId() {
return "pat.objects.Song";
}
public int getVersion() {
return 1;
}
}
包含对象如下:
public class Playlist implements Externalizable{
String name = "exampleplaylistname";
Vector songs = new Vector();
public void externalize(DataOutputStream out) throws IOException {
out.writeUTF(name);
out.write(songs.size());
Enumeration allItems = songs.elements();
while(allItems.hasMoreElements()){
Externalizable nextItem = (Externalizable) allItems.nextElement();
nextItem.externalize(out);
}
}
public void internalize(int version, DataInputStream in) throws IOException {
name = in.readUTF();
int size = in.readInt();
songs= new Vector();
for(int currentIndex = 0; currentIndex < size; currentIndex++){
Object nextItem = new Object();
((Externalizable)nextItem).internalize(version, in);
songs.addElement(nextItem);
}
}
}
public String getObjectId() {
return "pat.objects.Playlist";
}
public int getVersion() {
return 1;
}
}
我做错了什么或遗漏了什么导致播放列表(包含对象)无法存储,而如果我尝试单独存储第一个它可以工作?
请注意,重写方法与普通 Java 不同,因为这是 Externalizable 接口的 LWUIT 版本。