Проект буфера протокола Google соответствует большинству ваших требований.
за исключением структуры данных LinkedList для field3, но, поскольку g-p-b сохранил порядок повторяющихся значений, я думаю, вам этого достаточно.
Буферы протокола - это способ кодирования структурированных данных в эффективном, но расширяемом формате. Google использует буфер протоколов почти для всех своих внутренних протоколов RPC и форматов файлов.
шаг 1, установите g-p-b из http://code.google.com/apis/protocolbuffers/, прочитайте документы.
шаг 2, определите ваше message.proto так:
message UserDetail {
required string id = 1;
optional string nick = 2;
repeated double money = 3;
}
шаг 3, используйте protoc, скомпилируйте .proto и сгенерируйте файл UserDetail.java.
...
public interface UserDetailOrBuilder
extends com.google.protobuf.MessageOrBuilder {
// required string id = 1;
boolean hasId();
String getId();
// optional string nick = 2;
boolean hasNick();
String getNick();
// repeated double money = 3;
java.util.List<java.lang.Double> getMoneyList();
}
public static final class UserDetail extends
com.google.protobuf.GeneratedMessage
implements UserDetailOrBuilder ...
шаг 4, простой звонок
UserDetail.parseFrom(input);
User.UserDetail t.writeTo(output);
g-p-b имеет дополнение на другом языке, отметьте http://code.google.com/p/protobuf/wiki/ThirdPartyAddOns