protected static <V> void serializeStringMapTo( CodedOutputStream out, MapField<String, V> field, MapEntry<String, V> defaultEntry, int fieldNumber) throws IOException { Map<String, V> m = field.getMap(); if (!out.isSerializationDeterministic()) { serializeMapTo(out, m, defaultEntry, fieldNumber); return; } // Sorting the String keys and then look up the values during serialziation is 25% faster than // sorting map entries with a custom comparator directly. String[] keys = new String[m.size()]; keys = m.keySet().toArray(keys); Arrays.sort(keys); for (String key : keys) { out.writeMessage(fieldNumber, defaultEntry.newBuilderForType() .setKey(key) .setValue(m.get(key)) .build()); } }
protected static <V> void serializeLongMapTo( CodedOutputStream out, MapField<Long, V> field, MapEntry<Long, V> defaultEntry, int fieldNumber) throws IOException { Map<Long, V> m = field.getMap(); if (!out.isSerializationDeterministic()) { serializeMapTo(out, m, defaultEntry, fieldNumber); return; } long[] keys = new long[m.size()]; int index = 0; for (long k : m.keySet()) { keys[index++] = k; } Arrays.sort(keys); for (long key : keys) { out.writeMessage(fieldNumber, defaultEntry.newBuilderForType() .setKey(key) .setValue(m.get(key)) .build()); } }
protected static <V> void serializeIntegerMapTo( CodedOutputStream out, MapField<Integer, V> field, MapEntry<Integer, V> defaultEntry, int fieldNumber) throws IOException { Map<Integer, V> m = field.getMap(); if (!out.isSerializationDeterministic()) { serializeMapTo(out, m, defaultEntry, fieldNumber); return; } // Sorting the unboxed keys and then look up the values during serialziation is 2x faster // than sorting map entries with a custom comparator directly. int[] keys = new int[m.size()]; int index = 0; for (int k : m.keySet()) { keys[index++] = k; } Arrays.sort(keys); for (int key : keys) { out.writeMessage(fieldNumber, defaultEntry.newBuilderForType() .setKey(key) .setValue(m.get(key)) .build()); } }
protected static <V> void serializeBooleanMapTo( CodedOutputStream out, MapField<Boolean, V> field, MapEntry<Boolean, V> defaultEntry, int fieldNumber) throws IOException { Map<Boolean, V> m = field.getMap(); if (!out.isSerializationDeterministic()) { serializeMapTo(out, m, defaultEntry, fieldNumber); return; } maybeSerializeBooleanEntryTo(out, m, defaultEntry, fieldNumber, false); maybeSerializeBooleanEntryTo(out, m, defaultEntry, fieldNumber, true); }