public MessagePackable read(Unpacker u, MessagePackable to, boolean required)
            throws IOException {
        if (!required && u.trySkipNil()) {
            return null;
        }
        if (to == null) {
            try {
                to = (MessagePackable) targetClass.newInstance();
            } catch (InstantiationException e) {
                throw new MessageTypeException(e);
            } catch (IllegalAccessException e) {
                throw new MessageTypeException(e);
            }
        }
        to.readFrom(u);
        return to;
    }