+1 за protobuf, только сериализацию/десериализацию придётся для
вышеуказанной задачи писать самому, т.к. стандартные упаковщики
например не поймут несколько одинаковых ID чередующихся в другими,
либо придётся записи "закрывать", а это лишние накладные байты. Каждый ID отдельная сущность представленная в виде массива байт.
Преимущество кодирования protobuf - обратная совместимость, если попадается новый неизвестный ID он по правилам игнорируются и не должен вызывать ошибок, в то время как система его распознающая, правильно обработает. Т.е. почти безболезненно можно добавлять в систему новые сущности.