我有以下Java类:
public class GetCardInfoRequest implements RequestBase, java.io.Serializable{
public String CardID;
public String CardUniqueID;
public String who;
public String pass;
public GetCardInfoRequest(){}
public GetCardInfoRequest(String id, String uniqueid, String who, String pass){
CardID = id;
CardUniqueID = uniqueid;
this.who = who;
this.pass = pass;
}
@Override
public RequestType getRequestType() {
return RequestType.GetCardInfo;
}
public String getCardID() {
return CardID;
}
public String getCardUniqueID() {
return CardUniqueID;
}
}
我遇到序列化问题。我一直在阅读关于java序列化的教程,但是所有这些都暗示着使一个对象可序列化就像简单地实现“java.IO.Serializable”接口一样容易,唯一需要注意的是没有非序列化字段。上课。
正如你在这里看到的,我实现了java.io.Serializable,我的所有字段都是简单的字符串(注意:我实现的“RequestBase”接口只是说类必须有getRequestType方法,没有别的)。 但是,当我尝试将类的实例序列化为字节数组时,就像这样:
ByteArrayOutputStream b = new ByteArrayOutputStream();
ObjectOutputStream o = new ObjectOutputStream(b);
o.writeObject(req);
request = b.toByteArray();
引发了“Java.io.NotSerializableException”。 (在第3行)
我确信这是微不足道的,但由于所有教程都是如此通用,我不明白这个非常简单的代码有什么问题。有人可以帮忙吗?
答案 0 :(得分:2)
NotSerializableException
表示仅在类未实现Serializable
时才会抛出它。该消息也应该是无法序列化的类的名称。可能的问题是:
答案 1 :(得分:1)
Java中对象的序列化意味着将对象更改为某些字节。因此,您可以保存这些字节并通过反序列化来读取对象。请注意,此操作与平台和JVM无关。因此,您可以在一个平台中序列化对象,并在另一个平台中反序列化它。总之,serialize将对象转换为字节并反序列化将字节转换为对象。为了实施这些行动。您需要具有可序列化的对象:
public class Coordinate implements java.io.Serializable{
int x;
int y;
Coordinate(int x, int y){
this.x = x;
this.y = y;
}
}
您需要实现序列化和反序列化方法:
import java.io.*;
public class SerializeDeserializeExample {
public static void main(String [] args) {
Coordinate c = new Coordinate(10,77);
//Serialize
try {
FileOutputStream fileOut =
new FileOutputStream("coordinate.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(c);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in coordinate.ser");
}catch(IOException i) {
i.printStackTrace();
}
//Deserialize
Coordinate d = null;
try {
FileInputStream fileIn = new FileInputStream("coordinate.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
d = (Coordinate) in.readObject();
in.close();
fileIn.close();
}catch(IOException i) {
i.printStackTrace();
return;
}catch(ClassNotFoundException e) {
System.out.println("Coordinate class not found");
e.printStackTrace();
return;
}
System.out.println("Deserialized coordinate...");
System.out.println("x: " + d.x);
System.out.println("y: " + d.y);
}
}
有关详细信息,请访问:https://github.com/m-vahidalizadeh/foundations/blob/master/src/algorithms/SerializeDeserializeExample.java。
答案 2 :(得分:0)
嗯,我觉得自己像个白痴,但重启Eclipse解决了问题-_-
很抱歉浪费你的时间,但我已经习惯了Visual Studio,这是我第一次使用这个IDE,可能做了一些我不应该做的事情(这对我来说比VS更令人困惑我必须说)。
再次感谢您的帮助,对不起浪费您的时间。