Mercurial > hg > Members > sugi > MessagePack-java
view src/main/java/org/msgpack/template/ObjectArrayTemplate.java @ 0:cb825acd883a
first commit
author | sugi |
---|---|
date | Sat, 18 Oct 2014 15:06:15 +0900 |
parents | |
children |
line wrap: on
line source
package org.msgpack.template; import java.io.IOException; import java.lang.reflect.Array; import org.msgpack.MessageTypeException; import org.msgpack.packer.Packer; import org.msgpack.unpacker.Unpacker; @SuppressWarnings({ "rawtypes", "unchecked" }) public class ObjectArrayTemplate extends AbstractTemplate { protected Class componentClass; protected Template componentTemplate; public ObjectArrayTemplate(Class componentClass, Template componentTemplate) { this.componentClass = componentClass; this.componentTemplate = componentTemplate; } @Override public void write(Packer packer, Object v, boolean required) throws IOException { if (v == null) { if (required) { throw new MessageTypeException("Attempted to write null"); } packer.writeNil(); return; } if (!(v instanceof Object[]) || !componentClass.isAssignableFrom(v.getClass().getComponentType())) { throw new MessageTypeException(); } Object[] array = (Object[]) v; int length = array.length; packer.writeArrayBegin(length); for (int i = 0; i < length; i++) { componentTemplate.write(packer, array[i], required); } packer.writeArrayEnd(); } @Override public Object read(Unpacker unpacker, Object to, boolean required) throws IOException { if (!required && unpacker.trySkipNil()) { return null; } int length = unpacker.readArrayBegin(); Object[] array = (Object[]) Array.newInstance(componentClass, length); for (int i = 0; i < length; i++) { array[i] = componentTemplate.read(unpacker, null, required); } unpacker.readArrayEnd(); return array; } }