0

テキストファイルに基づいてオブジェクトを作成できるクラスを作成する方法を見つけようとしています。インターフェイス Readable にメソッド String asString() があり、クラス内のメソッド Readable read(String s) が文字列 s に基づいて Readable オブジェクトを構築する場合、(read(String s).asString()) になります。 equals(s)、書き込み/読み取り対象の Readable 型にプリミティブ引数しかない場合、リフレクションを使用して読み取りを簡単に書き込むことができましたが、コンストラクターが文字列との間で簡単に変換するためにそれらを書き込む方法がわかりません任意の順序で任意の量の Readable クラスを取ります。プリミティブのみを使用する場合、asString メソッドは次のように読み取ります。

private int n, double d;
...
public String asString(){
    return "@"+getClass().getName()+"#i%d#"+this.n+"%"+this.d;
}

Class.forName はプリミティブでは機能しないため、記号は任意の文字であり、String.split を使用できます。i と d は、フィールド n と d のプリミティブ型を指定します。この問題では、ネストされた Readables の約 7 層が必要ですが、そのうちのいくつかには、任意の量の Readables のコンテナーがあります。文字列に基づいて読み取りメソッドを記述する方法は理解できましたが、必要な情報をすべて保持しながら、オブジェクトを文字列に圧縮するにはどうすればよいでしょうか?

4

2 に答える 2

2

これは、Java API を使用して行うことができます:ObjectOutputStreamおよびObjectInputStream.

クラスはjava.io.Serializable、ストリームに書き込む/ストリームから作成するインターフェイスを実装する必要があります。

例:

public class WriteMe implements java.io.Serializable {
    private static final long serialVersionUID = 1234567890L; // Should be generated

    private int myInt = 164;
    private Date myDate = new Date();
    private transient int money = 1648; // Will be ignored
}

あなたのメインクラスで:

public class HelloStackoverflow {
    public static void main(String[] args) {
        ObjectOutputStream os = new ObjectOutputStream(System.out); // Print to standard output
        os.writeObject(new WriteMe());
    }
}

ObjectInputStream と .readObject() でも同じことができます。

オブジェクトを として保存する場合はString、出力が Java バイトコードになるため、Base64 を使用してエンコードする必要があります。

于 2014-10-08T10:08:00.467 に答える
0

タイタスがすでに言ったように、なぜ再び車輪を発明するのか. ObjectOutputStream および ObjectInputStream Java では、すでにそのようなメカニズムがあります

于 2014-10-08T09:58:49.680 に答える