protostuff是一个支持各种格式的一个序列化Java类库,包括JSON、XML、YAML等格式。
示例代码:
public class UserSchema implemets Schema<User>{ public boolea isIitialized(User user) { retur user.getEmail() != ull; } public void mergeFrom(Iput iput, User user) throws IOExceptio { while(true) { it umber = iput.readFieldNumber(this); switch(umber) { case 0: retur; case 1: user.setEmail(iput.readStrig()); break; case 2: user.setFirstName(iput.readStrig()); break; case 3: user.setLastName(iput.readStrig()); break; case 4: if(message.frieds == ull) message.frieds = ew ArrayList<User>(); message.frieds.add(iput.mergeObject(ull, this)); break; default: iput.hadleUkowField(umber, this); } } } public void writeTo(Output output, User user) throws IOExceptio { if(user.getEmail() == ull) throw ew UiitializedMessageExceptio(user, this); output.writeStrig(1, user.getEmail(), false); if(user.getFirstName() != ull) output.writeStrig(2, user.getFirstName(), false); if(user.getLastName() != ull) output.writeStrig(3, user.getLastName(), false); if(message.frieds != ull) { for(User fried : message.frieds) { if(fried != ull) output.writeObject(4, fried, this, true); } } } public User ewMessage() { retur ew User(); } public Class<User> typeClass() { retur User.class; } public Strig messageName() { retur User.class.getSimpleName(); } public Strig messageFullName() { retur User.class.getName(); } // the mappig betwee the field ames to the field umbers. public Strig getFieldName(it umber) { switch(umber) { case 1: retur "email"; case 2: retur "firstName"; case 3: retur "lastName"; case 4: retur "frieds"; default: retur ull; } } public it getFieldNumber(Strig ame) { Iteger umber = fieldMap.get(ame); retur umber == ull ? 0 : umber.itValue(); } private static fial HashMap<Strig,Iteger> fieldMap = ew HashMap<Strig,Iteger>(); static { fieldMap.put("email", 1); fieldMap.put("firstName", 2); fieldMap.put("lastName", 3); fieldMap.put("frieds", 4); }}
评论