package com.discursive.cjcook.proto; import java.util.Date; import com.discursive.cjcook.proto.Checkin.PositionData; import com.google.protobuf.InvalidProtocolBufferException; public class CheckinTiming { public static void main(String[] args) throws Exception { int size = 3000000; PositionData[] pArray = new PositionData[size]; Date now = new Date(); long preCreate = (new Date()).getTime(); for( int i = 0; i < size; i++ ) { PositionData pData = PositionData.newBuilder() .setVehicleId(1) .setTimestamp( now.getTime() ) .setAltitude( 123.0f ) .setLatitude( 1.0f ) .setLongitude( 1.0f ) .setSpeed( 120 ) .build(); pArray[i] = pData; } long postCreate = (new Date()).getTime(); float createTime = ((float) (postCreate - preCreate) / (float) size ) * 1000 * 1000; System.out.printf( "Create One PositionData %.0f ns\n", createTime); byte[][] encodedArray = new byte[size][]; long preEncode = (new Date()).getTime(); for( int i = 0; i < size; i++ ) { byte[] positionBArray = pArray[i].toByteArray(); encodedArray[i] = positionBArray; } long postEncode = (new Date()).getTime(); float encodeTime = ((float) (postEncode - preEncode) / (float) size ) * 1000 * 1000; System.out.printf( "Encode One PositionData to byte[] %.0f ns\n", encodeTime); PositionData[] decodedArray = new PositionData[size]; long preDecode = (new Date()).getTime(); for( int i = 0; i < size; i++) { PositionData pData = PositionData.parseFrom( encodedArray[i] ); decodedArray[i] = pData; } long postDecode = (new Date()).getTime(); float decodeTime = ((float) (postDecode - preDecode) / (float) size ) * 1000 * 1000; System.out.printf( "Decode One PositionData from byte[] %.0f ns\n", decodeTime); } }