その他のAndroidのビデオの高度なアーキテクチャ高度な学習クリック:https://space.bilibili.com/474380680
この記事を次の要素からのデータ送信のシーケンスを説明するために:
- [Serializableを原則]
- [Parcelable原理と使用方法]
- [JSON]
、Serializableを原則
- 1.コンセプト
- シリアル化:Javaオブジェクトをバイト列に変換する処理。
- 非直列化:Javaオブジェクトのバイトシーケンスのための回復プロセス。
- 2. 2つの主な目的を持つオブジェクトの配列の使用:
- 1)通常のファイルに保存されている恒久的にハードディスクに保存されたターゲットバイトシーケンスを、。
- ネットワーク上で送信されたバイトの2)標的配列。
- いわゆるシリアル化は、Javaストアド及び読み取りインタフェースが提供する汎用データです。どこかから読み出されて、関数の引数の後ろに隠れているところなセーブ。この方法では、そう長く実装Serializableインタフェースのいずれかのタイプとして、それがファイルに保存、または別の場所にネットワーク経由でデータストリームとして送信することができます。パイプは、システム内の他のプログラムに送信することができます。このように大幅にクラスの設計を簡素化します。限り設計上の特徴として、右のすべての問題を解決する上で読書を保存することができます。
- Javaの「オブジェクト直列化は、」アウトバイトこのオブジェクトを使用するには、将来的には、あなたがデータを復元することができますように、バイトの集合に変換Serializableインタフェースを実現するために、あなたのターゲットにすると、再構築のに応じて対象ます。
- いくつかのデータの中のプロセス変数の型ワークフロー:文字列、整数、短い、長い間、あなたはプロセス変数にオブジェクトを設定するので、あなたは、シリアル化のためのJavaBean理由を達成したい理由ですダブル、ブール、日付、バイナリ、直列化可能、私たちは、それ以外の場合は、セットアッププロセス変数の回にエラーの種類を見つけることができません、シリアル化を実装する必要があります。
- 機構は、JavaにあるJavaオブジェクトのシリアル化は、メモリ内のオブジェクト(JavaBeanのユーザーなど)バイナリストリームに変換します。Javaオブジェクトのシリアル化の後に容易に保存することができ、またはネットワークに送信されます。
- Javaのシリアル化メカニズムは、クラスを決定するシーケンスID(serialVersionUIDの)の一貫性の実行時のバージョンによって決定されます。
- デシリアライズする際、バイナリストリームを介してJava仮想マシンは、適切な情報を取得する、または矛盾シリアライズバージョンをスロー逆シリアル化することができ、同様に同じであるとみなされる場合、ローカルエンティティクラスは、比較を対応serialVersionUIDの例外。
所以涉及到数据传输或者存储的类,严格意义上来说都要加上序列化ID,这也是一种良好的编程习惯
。
二、Parcelableの原則および使用方法
Parcelableの2.1 Androidのソースコード
ソースコードは、導入することにより知ることができる、我々は、最大書くので、Parcelableインタフェースの実装クラスは、小包によって書かれたデータを回復し、空でない静的変数CREATORがなければならない、と例を挙げたされ、比較的簡単ですしかし、簡単な使用は、それがAndroidのParcelableでソースコードを表示して確認することができ、私たちの究極の目標ではない、Parcelable実装プロセスをシリアライズ、デシリアライゼーションの分割され、三つのプロセスを説明し、以下では、これら三つのプロセスの下で導入されました。
2.2小包について
導入前に、我々は、小包は?小包が平均パッケージ化されている翻訳された、実際には、我々は全体の転送データに使用されるプロセスであるバインダー、中のデータ伝送、および送信をパッケージ化する必要があるかを理解する必要があります
パーセル機構を提供し、データは共有メモリのシーケンスの後に書くことができる簡単に説明すると、他のプロセスは、共有メモリを介してパーセルバイトのこのストリームから読み出され、そしてオブジェクトにデシリアライズすることができ、図は、このプロセスのモデルです。
パーセルは(等のwriteInt()、のwriteFloat()、のような種々の方法を書き込むために対応)プリミティブデータ型を含んでいてもよい、Parcelableオブジェクトを含んでもよく、それはまた、アクティブオブジェクトIBinderの参照が含まれ、この基準は、受信のもう一方の端を引き起こしますのプロキシIBinder IBinderを指します。
小包Parcelableは直列化および非直列化を達成するために、読み取りと書き込みの方法によって達成しました
2.3 Parcelable 3(シリアライゼーション、デシリアライゼーション、説明)に記載された手順
シリアライズされた何2.3.1
シリアライズ、状態が保存又は送信されてもよい表すオブジェクトに変換します。直列化されたオブジェクトがネットワーク上で送信することができる、それがローカルに格納されてもよいです。
ここでは、基本的に関係を整理するだけでなく、シンプルで概略図を理解し、Parcelableを実装する前に、次のステップ、次の導入Parcelable 3つの主要なプロセスを実現するためにする必要があります。
[アップロードイメージ...(image.png-73288d- 1522235519935から0)]
I最初のコードステッカー
2.3.2 Parcelable役割を達成
1)永久的オブジェクト、オブジェクトがローカルファイルに格納されたバイトのシーケンスです。
2)オブジェクト・ネットワーク内の直列化されたオブジェクトを渡すことによって、
3)プロセスのシリアル化の間にオブジェクトを渡します。
実装インタフェースは、2つのメソッドを実装するために私たちを可能にするというクラスを記述するために最初Parcelable:
-
describeContentsの説明
ファイルの説明を担当しdescribeContents。それは、ソースコードの記述から分かるように、オブジェクト情報にのみいくつかの特別なニーズのために説明され、1を返す必要が、それ以外の場合に0を返します -
writeToParcelシーケンス
我々は直接小包のwriteメソッドを呼び出すことができますので、この方法は、基本的な書き込みがあり、writeToParcel小包が返され、writeToParcelによって直列化を実装するために私たちの方法で、基本データ型、他のブールに加えて、以下に別々に特別なオブジェクトとコレクションを話します持っている、ブールはintまたはバイトのストレージを使用することができます
私たちは、アルバムオブジェクトは4つのフィールドが含まれ、アルバム連載上記目的を達成します。
2.3.4直列化復元
上記、変数CREATORを定義するためのデシリアライズの必要性はまた、あなたは、Androidの例に直接コピーすることができ、特定の慣行が、あなたも自分のAを(名前は変更してはなりません)を定義することができ、Parcelableは匿名の内部クラスによって達成言いましたクリエーターインターフェース
2.4 Parcelableの使用と実装
三つのプロセス上記の紹介によると、それが終わっParcelableは、あなたがしようとするデータ伝送、別のputExtra getParcelableExtraで独自の2つのアクティビティを書くことができ、インテントに直接転送することができます。
2.5 Parcelableオブジェクトとコレクションの処理
Bookクラスは、あなたが実装手順ははみ出さず、通常のオブジェクトは、三つのプロセスを達成するために、Parcelableを実現する必要があります
。
書き込み、2つの方法があり、読書のコレクションは、
1のクラスローダを通読し、その後クラスに関連する情報であり、かつ、 - > writeList | readListは、
第二あなたがCREATORを作成するときに、着信クラスに関連するクラス関連の情報ではありません作成する- > writeTypeList | readTypeList | createTypedArrayList
いくつかの第二の高効率化
- >定義のセットがある場合は、時間に必須の注意を払うが、このように初期化する必要がありますpublic ArrayList<T> demo = new ArrayList<>();
そして、2.6 ParcelableとSerializableのの違いを比較
Parcelableと実装シリアライズがシリアライズされ、テントの間でデータを転送するために使用することができる、直列化はJava実装月頻繁IOオペレーション、消費が比較的大きいが、簡単な方法は、Android Parcelableが提供方法であるので、より効率的です、シーケンスメモリParcelableを選択し、ストレージデバイスやネットワーク伝送シリアライズを選択する(もちろんもやや複雑Parcelableことで)高いが、より実装するために複雑な、両方の選択ルールであります
2.6.1選択シリアライズ方法原理
高い直列化性能よりメモリ、Parcelableを使用する場合は1)、Parcelableを使用することが推奨されます。
2)時間の順序で直列化頻繁にGCを起こし、一時変数の多くを生成します。
3)ParcelableはあなたがよくParcelableとして、ディスク上に格納されたデータは外の世界での状況の変更時のデータの連続性を保証することはできませんしたい場合に使用することはできません。Serializableを低効率、今回が、Serializableを使用することをお勧めします。
三JSON
3.1 JSON
データ伝送フォーマット、および言語に依存しない、軽量の開発。
JavaScriptなど始まったが、比較的普及の背後にある、ほぼすべての言語には、適切な使用のAPIを持っています。
3.2データ構造
オブジェクトは---オブジェクト
のコンフィギュレーションに含まれる鍵{}括弧を使用して
キーは、実質的に任意のタイプまたはデータ構造(オブジェクトまたは配列)の文字列値でなければなりません
---配列array
要素を分離するために開始するには、コンマによって、角括弧を使用して[]
基本型:
文字列番号偽ヌルに忠実に
例:
場合は、次のパッケージを導入するのに使用する必要のあるJavaは、JSONのサポートを持っています:
コモンズ-beanutils.xxx.jar
コモンズ-collections.xxx.jar
コモンズ-lang.xxx.jar
コモンズ-logging.jar
JSON-lib.xxx.jar
ezmorph.xxx.jar
コモンモードJSON文字列を生成する:----------前端に後端からデータが
1 PUT使用するキーと値のマップデータは、オブジェクトのJSON形式に変換される- JSON文字列をに変換---その後、フロントエンドに送られます
2.ビルドJSONへのJavaBean
データは、遠位端から取得------>データの後端に変換することができる
JSONオブジェクトJava文字列に変換
マップオブジェクトにJSON文字列
詳しくはこちらAndroidのアーキテクチャ高度なビデオをクリックしてください:https://space.bilibili.com/474380680
参考:https://www.cnblogs.com/shan-kylin/p/9218680.html
HTTPS://www.cnblogs .COM / chenmingjun / P- / 9746310.html
https://www.jianshu.com/p/df35baa91541