Я работаю над Chessgame, и для этого я хочу передать игровые данные с одного устройства на другое через Bluetooth.
Это работало хорошо, но потом я добавил битовые карты вместо того, чтобы просто написать имя фигуры, и теперь Я не могу прочитать данные через Inputstream. Сначала я подумал, что растровые изображения не сериализуемы, поэтому я удалил их и просто отправил данные рисунка (xPos, yPos, color) и создал растровое изображение на основе этой информации. Но я все еще получаю это исключение:
W/System.err: java.io.StreamCorruptedException: Wrong format: 0
at java.io.ObjectInputStream.corruptStream(ObjectInputStream.java:675)
at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:788)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1983)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1940)
at java.io.ObjectInputStream.readNewArray(ObjectInputStream.java:1488)
at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:759)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1983)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1940)
at java.io.ObjectInputStream.readNewArray(ObjectInputStream.java:1488)
at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:759)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1983)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1940)
at com.example.chess.ChessActivity.deserialize(ChessActivity.java:187)
at com.example.chess.ChessActivity$3.handleMessage(ChessActivity.java:165)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6939)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
W/System.err: java.io.StreamCorruptedException
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2068)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:371)
at com.example.chess.ChessActivity.deserialize(ChessActivity.java:186)
at com.example.chess.ChessActivity$3.handleMessage(ChessActivity.java:165)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6939)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Исключение выдается, когда я пытаюсь десериализовать объект с помощью этой функции:
public Figure[][] deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
ByteArrayInputStream b = new ByteArrayInputStream(bytes);
ObjectInputStream o = new ObjectInputStream(b);
return (Figure[][]) o.readObject();
}
Я сериализую объекты с этой функцией:
public byte[] serialize(Figure[][] game) throws IOException {
ByteArrayOutputStream b = new ByteArrayOutputStream();
ObjectOutputStream o = new ObjectOutputStream(b);
o.writeObject(game);
o.close();
return b.toByteArray();
}
Я искал в inte rnet несколько часов и нашел десятки различных решений, например:
StreamCorruptedException неправильный формат
Java StreamCorruptedException
ObjectInputStream java .io.StreamCorruptedException: Неверный формат: 0 леденец и зефир
FileInputStream / ObjectInputStream: StreamCorruptedException : Неправильный формат
Но у меня ни один из них не работает.