【发布时间】:2012-11-26 15:46:48
【问题描述】:
我需要将对象序列化为字符串并反序列化。
我在 stackoverflow 上阅读了 sugestion 并编写了以下代码:
class Data implements Serializable {
int x = 5;
int y = 3;
}
public class Test {
public static void main(String[] args) {
Data data = new Data();
String out;
try {
// zapis
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(data);
out = new String(baos.toByteArray());
System.out.println(out);
// odczyt.==========================================
ByteArrayInputStream bais = new ByteArrayInputStream(out.getBytes());
ObjectInputStream ois = new ObjectInputStream(bais);
Data d = (Data) ois.readObject();
System.out.println("d.x = " + d.x);
System.out.println("d.y = " + d.y);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
但我得到错误:
java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298)
at p.Test.main(Test.java:37)
为什么? 我期望: d.x = 5 d.y = 3
如何做好呢? 啊。我不想将此对象写入文件中。我必须以字符串格式保存它。
【问题讨论】:
-
为什么你首先要在字符串中存储二进制表示?为什么不将其保留为字节数组或其他东西?...
-
@CostiCiudatu 因为我必须编写一个将对象存储到 sqlite 数据库中的方法,但 sqlite 中的一部分并不取决于我。并且有文本栏。现在我有 xml 序列化,但速度很慢。我需要快速的方法。
-
你检查过 SQLite 是否支持像 BLOB 这样的东西来存储原始字节吗?
-
@CostiCiudatu Sqlite 支持 BLOB 但它对我有什么帮助?
标签: java string serialization