String으로 개체를 serialize하고 deserialize해야합니다. 오브젝트를 양식 문자열로 이진 (de) 직렬화하는 방법은 무엇입니까?
는 I에 유래에 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가 raw 바이트를 저장하기 위해 BLOB과 같은 것을 지원하는지 확인 했습니까? –