@SuppressWarnings("unchecked") public byte[] encode(EncContext ctx) { ArrayList<Object> list = (ArrayList<Object>) ctx.getEncObject(); int listLength = (null != list ? list.size() : 0); Class<?> compomentClass = getCompomentClass(ctx.getField()); byte[] bytes = ctx.getCodecOf(short.class) .encode( ctx.getEncContextFactory().createEncContext((short) listLength, short.class, null)); if (listLength > 0) { ByteFieldCodec anyCodec = ctx.getCodecOf(FieldCodecCategory.ANY); for (int idx = 0; idx < listLength; idx++) { bytes = ArrayUtils.addAll( bytes, anyCodec.encode( ctx.getEncContextFactory() .createEncContext(list.get(idx), compomentClass, null))); } } return bytes; }
@SuppressWarnings("unchecked") public byte[] encode(EncContext ctx) { ArrayList<Object> list = (ArrayList<Object>) ctx.getEncObject(); int listLength = (null != list ? list.size() : 0); Class<?> compomentClass = getCompomentClass(ctx.getField()); ByteFieldDesc desc = ctx.getFieldDesc(); byte[] bytes = null; if (null == desc) { throw new RuntimeException("invalid array env."); } else if (!desc.hasLength()) { throw new RuntimeException("invalid array env."); } else { // 已经存在字段记录数组长度,不用自动写 } if (listLength > 0) { ByteFieldCodec anyCodec = ctx.getCodecOf(FieldCodecCategory.ANY); for (int idx = 0; idx < listLength; idx++) { bytes = ArrayUtils.addAll( bytes, anyCodec.encode( ctx.getEncContextFactory() .createEncContext(list.get(idx), compomentClass, null))); } } return bytes; }