我需要將對象序列化爲字符串並反序列化。如何二進制(德)序列化對象到/表單字符串?
我readed 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 beacuse我必須寫一個方法,將對象存儲到sqlite數據庫,但部分sqlite不依賴於我。並有文字欄。現在我有xml序列化,但速度很慢。我需要快速的方式。 – LunaVulpo
您是否檢查SQLite是否支持類似BLOB的存儲原始字節的內容? –