Мне нужно сериализовать список GeoPoints, а затем прочитать их обратно. Я искал в Интернете и узнал, что могу реализовать свой собственный GeoPoint и реализовать сериализуемый. Он работает, и я могу записать объект в файл .ser, но когда я его прочитал, я получаю invalidclassexception, в котором говорится о подробном сообщении - незаконном доступе к исходному объекту GeoPoint. Я предполагаю, что я не расширяю GeoPoint в классе MyGeoPoint должным образом. может кто-нибудь взглянуть и сказать мне, где я делаю ошибку?Расширение сериализованной геоинформации - невозможно прочитать объект обратно в
import com.google.android.maps.GeoPoint;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class MyGeoPoint extends GeoPoint implements Serializable {
static final long serialVersionUID = -3010695769693014199L;
public MyGeoPoint(int latitude, int longitude){
super(latitude, longitude);
}
public MyGeoPoint(){
this(0,0);
}
private void writeObject(ObjectOutputStream s) throws IOException{
s.defaultWriteObject();
}
private void readObject(ObjectInputStream s)
throws java.io.IOException, java.lang.ClassNotFoundException{
s.defaultReadObject();
}
}
, а затем он привыкает как
File filex = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator +"floodData.ser");
MyGeoPoint aPoint = new MyGeoPoint();
MyGeoPoint readPoint = null;
//write
try{
FileOutputStream f = new FileOutputStream(filex);
ObjectOutputStream s = new ObjectOutputStream(f);
s.writeObject(aPoint);
s.close();
} catch (IOException e) {
e.printStackTrace();
}
//read
try {
FileInputStream ff = new FileInputStream(filex);
ObjectInputStream ss = new ObjectInputStream(ff);
readPoint = (MyGeoPoint)ss.readObject();
ss.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
//end serialisationtest
и должен также закрыть объект FileOutputStream - е после сериализации части – xyz
@xyz: автоматически закрывающей внешний поток закрывает внутренний поток (см. [здесь] (http://java.sun.com/developer/technicalArticles/Streams/ProgIOStreams/)). Но 'close()' следует вызывать в блоке 'finally'. – Kai