2

Bundleなどを使用して、あるデバイスから別のデバイスにネットワーク経由で送信しようとしていますObjectInputStreams。問題は、シリアライズできないBundleことです。これを実現する簡単な方法はありますか?あらゆる種類の型 (String、int、parcelables、リストなど) を送信できるので使用したいBundle

4

1 に答える 1

2

バージョンの互換性が保証されないため、バンドルをシリアル化しないでください。したがって、すべてのデバイスがまったく同じバージョンを使用していることを確認できれば、問題ありません。しかし、私は本当にこれをお勧めしません. すべてのAPIは、これを行うべきではないと述べています!

Parcel は、汎用のシリアル化メカニズムではありません。このクラス (および任意のオブジェクトをパーセルに配置するための対応する Parcelable API) は、高性能 IPC トランスポートとして設計されています。そのため、パーセル データを永続ストレージに配置することは適切ではありません。パーセル内のデータの基になる実装を変更すると、古いデータが読み取れなくなる可能性があります。

https://developer.android.com/reference/android/os/Parcel.html

しかし、本当にやりたい場合は、次の方法で実装できます。

Bundle in = ...;
OutputStream os = ...

Parcel p = Parcel.obtain(); //create empty parcel object
in.writeToParcel(p, 0); //saving bundle as parcel
os.write(p.marshall()); //write parcel to stream
于 2016-06-19T19:05:27.913 に答える