Saya sedang mengembangkan aplikasi lintas platform yang berjalan di PC dan Android. Aplikasi ini membuat serial objek dan menyimpannya ke file di server kami. Masalah yang saya alami adalah ketika saya melakukan deserialisasi salah satu objek di PC, saya mendapatkan kesalahan berikut:
java.io.StreamCorruptedException: invalid type code: 71
at java.io.ObjectInputStream.readString(ObjectInputStream.java:1646)
at java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1736)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1706)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1344)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
namun, saya berhasil melakukan deserialisasi objek di ponsel Android (Samsung s5). Ini benar-benar membuatku bingung. Saya telah mempersempitnya menjadi masalah platform karena saya telah mengambil string yang disandikan secara langsung dan mendekodekannya di kedua perangkat, di mana kesalahan muncul di PC dan bukan di perangkat Android. Ini menunjukkan kepada saya bahwa string yang disandikan sebenarnya tidak rusak. Apakah saya melewatkan sesuatu? Setiap saran akan dihargai.
Berikut adalah kode yang saya gunakan untuk membuat serialisasi objek:
public static String objectToString(Serializable object) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
ObjectOutputStream obj = new ObjectOutputStream(out);
obj.writeObject(object);
byte[] data = out.toByteArray();
obj.close();
out.close();
return new String(Base64Coder.encode(data));
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static Object stringToObject(String encodedObject) {
try {
ByteArrayInputStream bin = new ByteArrayInputStream(Base64Coder.decode(encodedObject));
ObjectInputStream input = new ObjectInputStream(bin);
try{
return input.readObject();
}finally{
Gdx.app.log(TAG, "Input closed!");
input.close();
bin.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Juga, ini pembuat enkode Base64 I menggunakan.