オブジェクトをシリアル化してStringに変換し、逆シリアル化する必要があります。オブジェクトを/フォーム文字列にバイナリ(de)シリアル化する方法は?
私はStackOverflowの上で暗示をreadedこのコードます
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のようなものをサポートしているかどうかチェックしましたか? –