java - Android序列化-java反序列化

标签 java android serialization udp datagram

我在将对象从 Android 应用程序发送到 Java 应用程序时遇到一些问题。 我有一个完全相同的可序列化类。

当我在接收方使用此代码将对象从一个 java 应用程序发送到另一个 java 应用程序时,它工作得非常好:

@Override
public void run() {
    super.run();
    while(true){
        try{
            if(datagramSocket!=null)datagramSocket.close();
            datagramSocket = new DatagramSocket(PORT);
            buffer = new byte[4096];
            inPacket = new DatagramPacket(buffer, buffer.length);
            datagramSocket.receive(inPacket);

            InetAddress clientAddress = inPacket.getAddress();
            int clientPort = inPacket.getPort();

            ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
            ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(bais));
            Song song = (Song) ois.readObject();
            song.setClientIP(inPacket.getAddress());
            dc.addSong(song);
            datagramSocket.close();

        }catch (IOException e) {
            System.out.println("IOException on receiving song: " + e);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

但是当我尝试在 android 中执行相同操作(因此将歌曲对象从 android 发送到 java)时,我收到了 ClassCastException:

[Lcom.audiobuddy.serializables.Song; cannot be cast to com.audiobuddy.serializables.Song

一开始我以为是因为包名不一样,所以两边都改成了“com.audiobuddy.serializeds”。但我查看了我的错误,Android应用程序更改了包,在前面添加了“[L”和“;”在后面...

两边的宋类都有相同的serialVersionUID

最佳答案

错误消息表明您尝试将 Song[]([L(...)Song 表示歌曲数组)转换为歌曲。

您可能应该更改您的 ois.readObject(); 行,如下所示:

Song[] songs = (Song[]) ois.readObject();
Song song = songs[0];

关于java - Android序列化-java反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13691489/

相关文章:

android - 以 root 身份运行安全 API 调用,android

android - 通过 Android SDK 从 Microsoft Band 获取皮肤电 react

javascript - 重新索引数组

java - 在JAVA中的特定位置写入JSON文件

java - 箭头运算符 '->' 在 Java 中起什么作用?

android - AS3 检查日期是否属于范围?

java - YAML Mapper 如何在反序列化过程中忽略 yml 文件中的某些字段?

Java如何在序列化过程中使用Jackson ObjectMapper连接Item类中的两个字段?

java - 创建名为 'namedParameterJdbcTemplate' 的 bean 时出错,无法确定合适的驱动程序类,尝试运行 Web 应用程序

java - 使用 Java 64 位 1.7.0_06+ 从 JNLP 启动应用程序时出现 NullPointerException