Ваш класс должен реализовывать интерфейс Serializable .
Также обратите внимание, что каждое свойство вашего класса, в вашем случае объект также должно реализовывать этот интерфейс для правильной работы сериализации.
Так что я хотел бы рассмотреть возможность сделать этот класс универсальным, чтобы заставить объект реализовать интерфейс Serializable.
РЕДАКТИРОВАТЬ: например, если вы попытаетесь сериализовать DataPackage, который содержит ByteBuffer (который не Serializable), как это: new DataPackage(ByteBuffer.allocate(1))
, вы получите исключение.
попробуйте это:
import java.io.Serializable;
public class DataPackage<T extends Serializable> implements Serializable{
private T object;
private Date time;
private long timeMs;
private boolean responded;
private String publicIp;
private String internalIp;
private int hash;
public DataPackage(T object) {
this.object = object;
this.responded = false;
this.time = Calendar.getInstance().getTime();
this.timeMs = System.currentTimeMillis();
this.publicIp = this.generatePublicIp();
this.internalIp = this.generateInternalIp();
this.hash = System.identityHashCode(this);
}
private String generatePublicIp() {
try {
URL whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
return in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private String generateInternalIp() {
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
Таким образом, вы можете быть уверены, что все объекты, которые вы пытаетесь отправить, являются сериализуемыми.
Если вы не хотите использовать дженерики, то сделайте объект типа Serializable, например:
import java.io.Serializable;
public class DataPackage implements Serializable{
private Serializable object;
private Date time;
private long timeMs;
private boolean responded;
private String publicIp;
private String internalIp;
private int hash;
public DataPackage(Serializable object) {
this.object = object;
this.responded = false;
this.time = Calendar.getInstance().getTime();
this.timeMs = System.currentTimeMillis();
this.publicIp = this.generatePublicIp();
this.internalIp = this.generateInternalIp();
this.hash = System.identityHashCode(this);
}
private String generatePublicIp() {
try {
URL whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
return in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private String generateInternalIp() {
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}