オブジェクトを文字列に変換してから同じオブジェクトに戻す信頼できる方法はありますか? toString()
を使用してそれらを変換し、その値をコンストラクターに渡してオブジェクトを再構築する人々の例をいくつか見ましたが、すべてのオブジェクトがこのようなコンストラクターを持っているわけではないため、メソッドはすべての場合に機能しません。どうする?
はい、それは serialization !と呼ばれます!
String serializedObject = "";
// serialize the object
try {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream so = new ObjectOutputStream(bo);
so.writeObject(myObject);
so.flush();
serializedObject = bo.toString();
} catch (Exception e) {
System.out.println(e);
}
// deserialize the object
try {
byte b[] = serializedObject.getBytes();
ByteArrayInputStream bi = new ByteArrayInputStream(b);
ObjectInputStream si = new ObjectInputStream(bi);
MyObject obj = (MyObject) si.readObject();
} catch (Exception e) {
System.out.println(e);
}
これはコードです:
try {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream so = new ObjectOutputStream(bo);
so.writeObject(stringList);
so.flush();
redisString = new String(Base64.encode(bo.toByteArray()));
}
catch (Exception e) {
e.printStackTrace();
}
try {
byte b[] = Base64.decode(redisString.getBytes());
ByteArrayInputStream bi = new ByteArrayInputStream(b);
ObjectInputStream si = new ObjectInputStream(bi);
List<String> stringList2 = (List<String>)si.readObject();
System.out.println(stringList2.get(1));
}
catch (Exception e) {
e.printStackTrace();
}
すべての場合では動作しません.
あなたが会おうとしている追加の問題には、オープンストリーム、リスニングソケット、および外界からのほとんどすべてのものが含まれます。
繰り返す必要はありません 最も 少なくとも2つのJavaコアエンジニアは、シリアル化は 最大の間違いの一つ Javaの1つの最悪の機能、つまり、ファイナライズ後。 (それでもシリアル化は大好きですが、便利です。しかし、常に動作しません。)
はい、シリアル化 ObjectInputStream.readObjectおよびObjectOutputStream.writeObjectを使用できます。以下の例をご覧ください。
MyClass myClass = new MyClass();
FileOutputStream fileStream = new FileOutputStream("myObjectFile.txt");
ObjectOutputStream os = new ObjectOutputStream(fileStream);
os.writeObject(os);
os.close();
FileInputStream fileInStream = new FileInputStream("myObjectFile.txt");
ObjectInputStream ois = new ObjectInputStream(fileInStream);
MyClass myClass2 = ois.readObject();
ois.close();
1つの方法はJSONを使用することです。 Java固有の実装については、この投稿で答えが得られる可能性があります。
JSONの使用は十分に信頼性が高く、Webアプリケーション開発(Ajax)に使用されます。