是否有可靠的方法将任何对象转换为String然后再返回到同一个对象?我已经看到一些人使用toString()
转换它们然后将该值传递给构造函数以再次重构对象的示例,但并非所有对象都具有这样的构造函数,因此该方法不适用于所有情况。会怎么样?
答案 0 :(得分:59)
是的,它被称为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);
}
答案 1 :(得分:13)
这是代码:
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 :(得分:12)
答案 3 :(得分:5)
在所有情况下都无效。对象可能包含对处理其状态的其他JVM的引用,并且此状态可能无法让您恢复。
您将遇到的其他问题包括开放流,侦听套接字以及外部世界的其他任何问题。
没有必要重复大多数至少有两位Java核心工程师说序列化是最大的错误之一是Java中最糟糕的一个特性,也就是说,完成后。 (尽管我喜欢序列化,但它很方便。但它不会始终工作。)
答案 4 :(得分:3)
一种方法是使用JSON。对于Java中的特定实现,可以在这篇文章中给出答案:
使用JSON足够可靠,它可用于Web应用程序开发(Ajax)。
答案 5 :(得分:3)
是的,它是序列化您可以使用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();
答案 6 :(得分:0)
您可以使用org.apache.commons
中的SerializationUtils。
它提供了方法serialize
和deserialize