SharedPrefence,儲存簡單的設定資料等
SQLite,儲存複雜的關係型資料
File,一般儲存紀錄檔檔案,本地檔案快取, protobuf ,7z
ContentProvider,跨程序資料存取,一般和SQLite結合使用,把資料提供給其他app程序使用。
網路儲存 , 網路儲存 涉及到序列化/反序列化(protobuf,xml,json)
SQLiteStatement
使用事務
使用索引
非同步執行緒,寫資料庫統一管理
xml
json
protobuf 與平臺無關
7z壓縮 (作業)
相對於xml,json,protobuf的優點:
缺點:
1、二進位制格式導致可讀性差
為了提高效能,protobuf採用了二進位制格式進行編碼。這直接導致了可讀性差。這個直接影響開發測試時候的效率。當然,一般情況下,protobuf非常可靠,並不會出現太大的問題。
2、缺乏自描述
一般來說,XML是自描述的,而protobuf格式則不是。 給你一段二進位制格式的協定內容,不配合你寫的結構體是看不出來什麼作用的。
在命令列中使用protobuf
如果要用命令將protobuf檔案(protobuf檔案的字尾為.proto)編譯為java檔案,需要安裝protobuf工具,然後使用protoc 命令進行編譯。
在Android studio專案中使用protobuf
1)首先,我們需要在全域性的buid.gradle檔案中新增上protobuf工具外掛:
classpath ‘com.google.protobuf:protobuf-gradle-plugin:0.8.10’
2)然後,要app/buid.gradle檔案中:
①新增上此外掛
apply plugin: 'com.google.protobuf'
②新增依賴
implementation 'com.google.protobuf:protobuf-java:3.7.1'
③新增protobuf 設定
protobuf {
//設定protoc編譯器
protoc {
artifact = 'com.google.protobuf:protoc:3.7.1'
}
//這裡設定生成目錄,編譯後會在build的目錄下生成對應的java檔案
generateProtoTasks {
all().each { task ->
task.builtins {
remove java
}
task.builtins {
java {}
}
}
}
}
④新增 protobuf檔案的目錄(在android {}裡面)
sourceSets {
main {
proto {
srcDir 'src/main/java/com/protobufdir'
}
}
}
3)在src/main/java/com/protobufdir目錄下新建protobufbean.proto檔案,新增如下程式碼:
syntax = "proto3";
package com.example.protobufdemo;//包名
option java_package = "com.example.protobuf02";
option java_outer_classname = "Person";
option csharp_namespace = "android";
message _Person{
string name = 1;
int32 id = 2;
string email = 3;
enum _PhoneType{
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message _PhoneNumber{
string number =1;
_PhoneType type = 2;
}
repeated _PhoneNumber phone = 4;//陣列
}
4) 重新build專案,AS build專案時,會將.proto檔案生成java檔案。
可以在\app\build\generated\source\proto\debug\java\ 目錄下找到這些生成的java檔案,
這些生成的java檔案封裝好了一些序列化和反序列化的API ,這些API 可以直接在專案中呼叫 。
在Protocol Buffers中提供了很多的標量型別,供我們在定義欄位型別時使用:
(n <<1)^(n>>31)或者(n<<1)^(n>>63)
大端序列
先寫高位,再寫低位
小端序列
先寫低位,再寫高位