StreamCorruptedException: неправильный формат: 0 - PullRequest
1 голос
/ 16 марта 2020

Я работаю над 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 : Неправильный формат

Но у меня ни один из них не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...