2017-03-19 7 views
0

JavaとAndroid Base64のエンコード/デコードに違いはありますか? 私はJavaサーバー上のオブジェクトをエンコードしようとしていて、アンドロイドのアプリケーションでデコードしていますが、全く別のものを取得しています。 (私はそれがJSONで行うことができます知っている)。 AndroidアプリでAndroidで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()); 
} 

:JAVAサーバー上

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();

サーバーからクライアントにオブジェクトを送信する他の方法はありますか? AndroidアプリにJavaサーバーからオブジェクトを送信するには

+0

Base64が異なり、破損したバイナリデータがObjectInputStreamに到達すると、シリアライゼーションアルゴリズムは失敗します。また、同じ基本クラスであるかどうかをチェックします。その結果、「全く異なる」ものを得ることは考えにくい。少なくともこれについてもっと説明する必要があります。バイナリデータが異なる場合は、初期データのフラグメントと変換後のデータを含めることができます。例外がスローされた場合、どちらが例外になりますか?オブジェクトが誤って初期化されている場合、オブジェクトの壊れた部分のソースコードフラグメントが必要です。間違っていることを理解するのに十分な詳細がありません。 – h22

+0

Javaを使ってアンドロイドにオブジェクトを送信することもできます.Jsonを使わずに – ArolaAb

+0

@ArolaAbどうすればいいですか? – igor

答えて

0

  1. を自分のクラスを作成し、サーバー上のJavaプロジェクトではSerializableを実装しています。
  2. クラスにserialVersionUIDが、同じオブジェクトが/ sendedではrecivedされる。このserialVersionUIDの 意志の保証を生成し、あなたはeclpise上のクラス名とプレスの上にマウスを置くことによって シリアルverison IDを生成 を行うことができます。
  3. クラスをjarファイルとしてエクスポートし、ディスクドライブのどこかに保存します。
  4. プロジェクトからクラスを削除します。
  5. androidとjavaの両方で作成したjar witchをインポートします。
  6. オブジェクトを送信するには、ObjectOutputStream/ObjectInputStreamおよびすべての関連メソッド を使用します。

送信されたオブジェクトを読み取るには:

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

あなたはJSON形式と使用としてそれを送ることができますあなたはそれを上にHTTPを送信したい場合は、このメソッドは、ソケットを使用して行うことができますしてくださいjson文字列をオブジェクトに変換するGsonライブラリ。

+0

それは私がやったことですが、私はjsonなしhttpでそれを送信したい – igor

+0

あなたがエンコードされた文字列があることを知るためにアンドロイドアプリに与えるヒントオブジェクトと同じ種類のクラスに変換する必要がありますか? – ArolaAb

関連する問題