Я разрабатываю кроссплатформенное приложение, которое работает как на ПК, так и на Android. Это приложение сериализует объекты и сохраняет их в файл на нашем сервере. У меня проблема в том, что когда я десериализую один из объектов на ПК, я получаю следующую ошибку:
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)
однако я могу успешно десериализовать объект на телефоне Android (Samsung s5). Это совершенно сбивает меня с толку. Я сузил его до проблемы с платформой, так как я взял закодированную строку напрямую и декодировал ее на обоих устройствах, где ошибка появляется на ПК, а не на устройстве Android. Это говорит мне о том, что закодированная строка на самом деле не повреждена. Я что-то упускаю? Мы ценим любые предложения.
Вот код, который я использую для сериализации объектов:
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;
}
Кроме того, это кодировщик Base64 I использовать.