3

私はこの形式のphpに配列を持っています:

<?php
$value = array("id" => 42, "user" => "superman");
echo serialize($value); 
?>

連載:

a:2:{s:2:"id";i:42;s:4:"user";s:8:"superman";} 

StringこれをJavaで受け取ります。これをJavaでデシリアライズするにはどうすればよいですか? 私implements SerializableはJavaで知っていますが、この場合は機能しません。

この種の形式でオブジェクトを作成したい:

import java.io.Serializable;

public class Serial implements Serializable{
    private int mId;
    private String mUser;

    public Serial(int mId, String mUser) {
        super();
        this.mId = mId;
        this.mUser = mUser;
    }
    public int getId() {
        return mId;
    }
    public void setId(int id) {
        this.mId = id;
    }
    public String getUser() {
        return mUser;
    }
    public void setUser(String user) {
        this.mUser = user;
    }
}

Stringその後、PHPでデシリアライズするためにJavaオブジェクトからシリアライズされたものをもう一度作成したいと思います。

ご協力いただきありがとうございます。

4

2 に答える 2

3

ある言語のシリアル化されたオブジェクトを別の言語でネイティブに読み取ることはできません (言語にはそれぞれ独自のシリアル化プロトコル/形式があり、相互の形式を読み取れる保証はありません)。Java のシリアル化されたオブジェクトはバイナリ形式にシリアル化され、提供された PHP に変換されます。テキスト形式。

使用できるGoogle のプロトコル バッファなどのライブラリがあります。それらは正式には PHP をサポートしていませんが、PHP のプロトコル バッファ サポートを提供するサード パーティのライブラリがあります。

プロトコル バッファは、構造化データをシリアル化するための Google の言語中立プラットフォーム中立、拡張可能なメカニズムです。XML を考えてみてください。データをどのように構造化するかを一度定義すると、特別に生成されたソース コードを使用して、Java、C++、または Python などのさまざまな言語を使用して、さまざまなデータ ストリームとの間で構造化データを簡単に読み書きできます。

それが気に入らない場合は、PHP のシリアル化されたオブジェクトを Java オブジェクトに読み取るための独自のプロトコルを開発する必要があります。シリアル化されたs:2:"id";サンプルからは信じられないため、変更された JSON ライブラリを使用してこれを行うことができる場合があります。オブジェクトは有効な JSON です。Java を使用してこれを行うためのライブラリが存在しますが、PHP シリアライゼーション形式は null 値を含む可能性があるため「安全」ではないため、使用しないことをお勧めします。

于 2013-08-07T13:12:33.780 に答える
2

あなたには少し遅れていますが、他の人(私を含む)に役立つ可能性があります:

多くの回答があるこの質問を確認できます。読む時間がない人のために、そこにつながる主なリンクを次に示します。

1- PHP デシリアライゼーション用の静的クラス

2-サテライト クラスを持つ Pherialize クラス

しかし、@ Robadob (およびすべての開発者) が言ったように、この種の作業を行うための最も信頼できる方法は、標準形式を使用することです。

于 2015-03-10T19:25:05.490 に答える