需從服務端發送 800+ 個 int 到 Android 客戶端。核心問題是**定義二進制協議格式**,保雙端解析一致。
// 發送端
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
int[] data = generateIntArray(); // 800+ 元素
dos.writeInt(data.length); // 1. 先寫數組長度 (4 bytes)
for (int v : data) {
dos.writeInt(v); // 2. 依次寫入每個 int (4 bytes)
}
dos.flush();
// 接收端
DataInputStream dis = new DataInputStream(socket.getInputStream());
int len = dis.readInt(); // 1. 讀長度
int[] data = new int[len];
for (int i = 0; i < len; i++) {
data[i] = dis.readInt(); // 2. 逐個讀取
}
// 後續處理 data...
DataOutputStream/InputStream 使用網絡字節序,Java/Android 完全兼容。| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| JSON 序列化 (Gson/Jackson) | 可讀、調試易、支持複雜對象 | 體積大 2-3 倍、解析慢、需全量載入 | 數據量小、頻率低、需人工檢查 |
| Protobuf / FlatBuffers | 極致體積/速度、Schema 演進、多語言 | 需定義 .proto、引入依賴、學習成本 | 高性能、長期維護、跨語言項目 |
| Java 原生序列化 | 代碼極少 | 不安全、不跨語言、版本脆弱、體積大 | **強烈不推薦**生產環境使用 |
ProtocolUtil.writeIntArray()/readIntArray() 統一入口。[Magic:2B][Version:1B][Len:4B][CRC:4B][Data:N*4B]。