指定3.0+版本java
syntax = "proto3"; message gps_data { int64 id = 1; string terminalId = 2; string dataTime = 3; double lon = 4; double lat = 5; float speed = 6; int32 altitude = 7; int32 locType = 8; int32 gpsStatus = 9; float direction = 10; int32 satellite = 11; }
生成protof文件:git
protoc -I=src/main/resource/proto --java_out=src/main/java src/main/resource/proto/protobuf.proto
引入依賴:github
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.5.0</version> </dependency>
若是使用json,引入依賴:redis
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java-util</artifactId> <version>3.5.0</version> </dependency>
System.out.println("===== 構建一個GPS模型開始 ====="); Protobuf.gps_data.Builder gps_builder = Protobuf.gps_data.newBuilder(); gps_builder.setAltitude(1); gps_builder.setDataTime("2017-12-17 16:21:44"); gps_builder.setGpsStatus(1); gps_builder.setLat(39.123); gps_builder.setLon(120.112); gps_builder.setDirection(30.2F); gps_builder.setId(100L); Protobuf.gps_data gps_data = gps_builder.build(); byte[] bytes = gps_data.toByteArray(); jedis.set("foo".getBytes(), bytes); System.out.println("========"); bytes = jedis.get("foo".getBytes()); Protobuf.gps_data gd = null; try { gd = Protobuf.gps_data.parseFrom(bytes); } catch (InvalidProtocolBufferException e) { e.printStackTrace(); } System.out.println("id: " + gd.getAltitude() + ", time: " + gd.getDataTime());
redis結果:json
127.0.0.1:6379> get foo "\bd\x1a\x132017-12-17 16:21:44!\xbaI\x0c\x02+\a^@)9\xb4\xc8v\xbe\x8fC@8\x01H\x01U\x9a\x99\xf1A"
System.out.println("===== 使用gps 轉成json對象開始 ====="); String jsonFormatM = ""; try { jsonFormatM = JsonFormat.printer().print(gps_builder); } catch (Exception e) { e.printStackTrace(); } System.out.println(jsonFormatM.toString()); System.out.println("json數據大小:" + jsonFormatM.getBytes().length); System.out.println("===== 使用gps 轉成json對象結束 =====");