Android中Java解码中的编码对象

Android中Java解码中的编码对象,java,android,base64,decode,encode,Java,Android,Base64,Decode,Encode,Java和Android Base64编码/解码之间有什么区别吗? 我试图在我的java服务器上对一个对象进行编码,并在我的android应用程序上进行解码,但得到的结果完全不同。 (我知道这可以通过JSON实现) 在JAVA服务器上: public static String toString( Serializable o ) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream

Java和Android Base64编码/解码之间有什么区别吗? 我试图在我的java服务器上对一个对象进行编码,并在我的android应用程序上进行解码,但得到的结果完全不同。 (我知道这可以通过JSON实现)

在JAVA服务器上:

public static String toString( Serializable o ) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream( baos );
        oos.writeObject( o );
        oos.close();
        return Base64.getEncoder().encodeToString(baos.toByteArray()); 
}
在Android应用程序上:

public static Object fromString( String s ) throws IOException, ClassNotFoundException {

    byte [] data = Base64.decode( s, Base64.NO_WRAP);
    ObjectInputStream ois = new ObjectInputStream(
            new ByteArrayInputStream(  data ) );
    Object o  = ois.readObject();
    ois.close();
    return o;
}
更多数据:

测试对象是

new String("igor")

encoded in java : rO0ABXQABGlnb3I=
decoded in android : data = [-84 -19 0 5 116 0 4 105 103 111 114]
函数压碎了ois.readObject()


是否有其他方法将对象从服务器发送到客户端?

将对象从java服务器发送到android应用程序:

  • 在服务器上的java项目中创建类并实现Serializable
  • 为类生成SerialVersionId,该SerialVersionId 将保证接收/发送相同的对象,您可以 将鼠标放在类名上,然后按generate,即可实现此功能 串行验证id
  • 将类导出为jar并将其保存在磁盘驱动器上的某个位置
  • 从项目中删除该类
  • 导入您在android和java中创建的jar witch
  • 使用ObjectOutputStream/ObjectInputStream和所有相关方法 发送对象
  • 要读取已发送的对象,请执行以下操作:

    Myclass m = (Myclass) ObjectInputStream.readObject();
    

    请注意,此方法可以使用套接字完成,如果要通过http发送,可以将其作为json格式发送,并使用Gson库将json字符串转换为对象。

    如果Base64不同,并且ObjectInputStream中出现断开的二进制数据,序列化算法将失败。它还将检查它是否是相同的基类。因此,获得“完全不同”的东西是不可能的;至少你需要多解释一下。如果二进制数据不同,是否可以包含初始数据的片段以及转换后的数据。如果抛出异常,是哪一个?如果对象被错误地初始化,我们需要对象断开部分的源代码片段。没有足够的细节来理解问题所在。您可以将对象从java发送到android,而无需执行此操作。。也不用json@ArolaAb我该怎么做?在我给你答案之前,请编辑你的问题这正是我所做的,但我想通过http发送它而不使用JSON。你给android应用程序的提示是什么,你编码的字符串是一个对象,应该转换为同一类型的类?