簡體   English   中英

在Android中用Java解碼對象編碼對象

[英]Encode object in Java decode in Android

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應用,請執行以下操作:

  1. 在服務器上的java項目中創建您的類並實現Serializable。
  2. 生成該類的serialversionuid,該serialversionuid將確保已接收/發送相同的對象,您可以在eclpise上通過將鼠標放在類名稱上並按生成串行版本號來做到這一點。
  3. 將類導出為jar,並將其保存在磁盤驅動器上的某個位置。
  4. 從您的項目中刪除該類。
  5. 導入您在android和java中創建的jar巫婆。
  6. 使用ObjectOutputStream / ObjectInputStream以及所有與發送對象有關的方法。

讀取已發送的對象:

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

請注意,此方法可以使用套接字完成,如果要通過http發送,則可以將其作為json格式發送,並使用Gson庫將json字符串轉換為對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM