シリアライゼーションを使用して、ユーザーによって変更されたBeanを保存することを計画しています。しかし、ByteArrayOutputStreamはバイト配列byte []を出力します。それをStringに変換して元に戻すと、逆シリアル化できません。 - これを説明する方法? バイト配列を使用してOracleに格納する場合、複雑です。文字列をデシリアライズする方法はありますか?ありがとうございました! 私は中国人ですので、私の悪い英語のために私を許してください。オブジェクトをデシリアライズするシリアライズしObjectInputStream
する:)Javaシリアル化を使用してオブジェクトを保存する
答えて
使用ObjectOutputStream
。これらのクラスのAPIドキュメントには、ファイルを使用してオブジェクトを直列化および逆シリアル化する方法の例があります。
はString
にbyte[]
を強制しようとしないでください。 (なぜあなたはそれをString
に入れたいのですか?)。シリアライズされたオブジェクトは、バイナリデータであり、String
に格納するテキスト文字ではありません。バイトで
ありがとうございました!プロジェクトは、DBにオブジェクトを格納する必要があるので、私はJSONのような他の方法を使用しようとしています。再度、感謝します! –
オブジェクトをJSON形式で保存する必要がある場合、Javaのシリアル化メカニズムは使用するものではありません。 [Google GSON](http://code.google.com/p/google-gson/)などのライブラリを使用してください。 – Jesper
私はプロジェクトでGSONを使用する準備ができて、あなたの助言は便利です!ありがとう! –
[]は、すべての可能なバイト値は、テキスト内の値のこれらの値との組み合わせが無効であると予想されるようにテキストに変換することができない、しかし127に、すなわち-128を使用することができます。
私はあなたがXMLやJSONなどのテキストベースのシリアル化を検討し提案します。これらはテキストとして安全に読み書きできます。テキストベースのシリアライゼーションは人間が読むことができ、値を修正したい場合はテキストとして編集することができます。
編集:私は、粗であるXMLEncoderを使用して見ますが、XMLとJSONのためにまたはXStream建てでしょう、より柔軟かつ効率的である(ただし、余分なライブラリのカップルが必要です)
あなたのアドバイスは素晴らしいです。ありがとう! –
ブリーフ回答:バイト配列をBase64文字列としてエンコードします。
Base64では、バイナリデータが格納され、テキストとして送信することができることを保証する方法である - 合理的な説明がWikipediaで見つけることができます。バイト配列をエンコードしないと、データは異なるコードページなどを使用することによって簡単に「壊れた」状態になります。注意しなければならないことは、base64エンコーディングはバイト配列よりも多くの領域を占有することになります(バイト配列20バイト)保存する
を約30文字がかかる場合がありますエンコード/ Base64でApache Commons Codecをデコードすることができ、多くのライブラリがあります。一つだけです。使用するライブラリの詳細については、this questionを参照してください(JDKには「プライベート」のライブラリがありますが、その使用は一部の開発者にとっては疑わしいと思われるかもしれません)。
だから、要約すると、文字列にオブジェクトをシリアル化するために、私たちObjectOutputStream
とByeArrayOutputStream
バイト配列に変換し、文字列にそれを翻訳するのBase64エンコーダを使用します。
逆シリアル化を行うには、Base64デコーダを使用して文字列をバイト配列に変換してから、ByteArrayInputStream
とObjectInputStream
を使用して読み込みます。
ありがとうございます.Gsonを使って対処します。 –
static final String SQL_SERIALIZE_OBJECT="insert into serialized_java_objects(serialized_id,object_name,serialized_object) values (ser_id_seq.nextval,?,?)";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(objectToBeSerilize);
byte[] serializeBytes = baos.toByteArray();
prepStatement = connection.prepareStatement(SQL_SERIALIZE_OBJECT);
prepStatement.setString(1, objectToBeSerilize.getClass().getName());
prepStatement.setBytes(2, serializeBytes);
prepStatement.executeUpdate();
- 1. シリアル化、オブジェクトの保存
- 2. C#を使用してJava逆シリアル化可能オブジェクトをシリアライズ
- 3. JSONシリアル化用のオブジェクトを作成して保存しますか?
- 4. jaxbを使用してJavaオブジェクトにXMLデータを保存する
- 5. ブースト::シリアル化を使用してデータを保存するときのSegフォルト
- 6. Flexオブジェクトをシリアル化してアプリケーション状態を保存/復元する
- 7. Javaのシリアル化オブジェクト
- 8. シリアル化されたオブジェクトをMySqlデータベースに保存する
- 9. HashTableプロパティを持つオブジェクトをシリアル化してCouchBaseに保存します
- 10. Javaでスカラー逆シリアル化されたオブジェクトを逆シリアル化する
- 11. Java:シリアル化なしでObjectOutputStreamを使用
- 12. ジャクソンを使用してJSONをJavaに逆シリアル化する
- 13. エラーfromJsonを使用してオブジェクトを逆シリアル化しますか?
- 14. WPFのUIデータをJSONで保存して読み込みシリアル化/逆シリアル化
- 15. JavaオブジェクトのBlazeDsシリアル化
- 16. DataContractSerializerとDataProtectionProviderを使用してオブジェクトをシリアル化および暗号化する
- 17. シリアルを使用してboost :: ptr_vectorをシリアル化する方法は?
- 18. Json.Netを使用してEntity Frameworkオブジェクトをシリアル化
- 19. jongoを使用してmongo dbにタイムスタンプを保存するJavaオブジェクト?
- 20. ジャクソンAPIを使用してJSONオブジェクトをJava Stringに保存する
- 21. ハフマンツリーをファイルに保存する際にシリアル化ヘルプが使用される
- 22. XMLシリアル化を使用して親ノードなしでコレクションをシリアル化する
- 23. Androidのジレンマを保存するには、間違っているシリアル化を使用していた
- 24. JavaでPBEWithHmacSHA256And_256を使用してファイルに保存するパスワードの暗号化
- 25. シリアル化可能なオブジェクトを.netのレジストリに保存しますか?
- 26. .NETでJsonConvertを使用して可変長オブジェクトのJSONシリアル化
- 27. DataContractSerializerを使用して複数のオブジェクトをシリアル化および逆シリアル化する
- 28. jsonの逆シリアル化でオブジェクトを文字列として保持
- 29. オブジェクトへのエイリアスを使用したオブジェクトへのマップのシリアル化
- 30. iOSのカスタムオブジェクトを保存/シリアル化する正しい方法
あなたのアプローチを示す短いコードスニペットがありますか?私は文字エンコーディングがここで問題であると確信しています。 –
文字列がbyte []ではないため、文字列へのシリアライズは正しく動作しません。あなたはbase64エンコーディングを使ってバイトをStringに保存することができます。しかし、問題は、バイト[]による永続性は良い考えではなく、多くの問題の影響を受けやすいことです。 ORMを使用するか、Beanを検査してフィールドを保存するか、JSONなどのより良いシリアル化を使用する必要があります。 – Viruzzo