android - Android-Java 通信的 StreamCorruptedException

标签 android exception serialization

我需要将序列化数据从 Android 设备发送到 Java 服务器。 不知道为什么,通讯好像很不稳定。在调试器中,java.io.StreamCorruptedException: 在启动后立即抛出。没有一个对象通过。 在没有调试器的情况下,将传递近 10 条消息,直到抛出相同的异常。 任何人有想法,请帮助我:) 谢谢你! 费边

异常(exception):

java.io.StreamCorruptedException: invalid type code: 2F
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at androidAnbindung.AndroidVerwalter.run(AndroidVerwalter.java:114)

java代码:

public void Nachrichtenaustausch(){
    port ++;
    try {
        serverSocket = new java.net.ServerSocket(port);
        System.out.println("Warte auf 2. Verbindungsaufbau...");
        client = serverSocket.accept();
        System.out.println("Verbindung 2 ist eingegangen...");
        in = new ObjectInputStream(new ObjectInputStream(client.getInputStream()));
        Nachricht n;
        // starte den regulären Verkehr mit dem Androidgerät
        new Thread(this).start();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

@Override
    public void run() {
        Nachricht speicher;
        while (true) {
            try {

                speicher = (Nachricht) in.readObject();
                if (speicher != null) {
                    System.out.println(speicher.getName()+"..............................."+speicher.getWerte().get(0));
                }synchronized (objekliste) {
                    for (AndroidObject ao : this.objekliste) {
                        if (speicher.getName().equals(ao.name)) {
                            ao.abstrakter_Wert = speicher.getAktuellerWert();
                            if (speicher.getWerte()!=null) {
                                ao.werte = speicher.getWerte();

                            }
                        }
                    }
                }
                Thread.sleep(50);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }catch (Exception e) {
                // TODO: handle exception
            }

        }
    }

和安卓线程:

@Override
public void run() {
    // TODO Auto-generated method stub  
    try {
        while (true) {
            if (!nachrichtenliste.isEmpty()) {
                Nachricht speicher = nachrichtenliste.get(0);
                try {
                    out.writeObject(speicher);
                    out.flush();
                    synchronized (nachrichtenliste) {
                        nachrichtenliste.remove(speicher);
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            Thread.sleep(50);
            handler.post(this);
        }


    } catch (Exception e) {
        // TODO: handle exception
    }       
}

最佳答案

我可以想象 Android 和 Java 在这里并不完全兼容序列化。以便一方发送另一方不期望的代码。

我宁愿在这里使用一些更多的文本协议(protocol)(json、xml),而不是序列化。

关于android - Android-Java 通信的 StreamCorruptedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5833890/

相关文章:

android - 在 SQLite 中搜索数据

尝试解析 JSON 数据时出现 android JSONException

php - 我如何从文件中反序列化 Symfony session ?

android - 在编写 Gradle 依赖项时,在哪里可以找到要引用的 AndroidX Artifact 列表?

java - 将 Bundle 转换为 JSON

ruby-on-rails - 如何分析 ruby​​ 错误?

.net - 表单加载事件中未处理的异常

java - 如果父级没有无参数构造函数,则出现序列化问题

java - getBytes 和 serialize with String 有什么区别?

android 5.0 在打开相机时要求安全警告