David Parks created HADOOP-9240: ----------------------------------- Summary: Making ArrayWritable typed Key: HADOOP-9240 URL: https://issues.apache.org/jira/browse/HADOOP-9240 Project: Hadoop Common Issue Type: Improvement Components: io Reporter: David Parks Priority: Minor
ArrayWritable is just painful to use in practice, it would be nice if we had a typed version of ArrayWritable that had all the features of an ArrayList. It wasn't hard to write, and it doesn't cost more in terms of storage or CPU than an ArrayWritable. So I wonder why not include a more usable ArrayListWritable class with Hadoop? Code pasted below, unless there's a reason that this is a bad idea I'm happy to provide the unit test for it as well. @SuppressWarnings("serial") public class ArrayListWritable<E extends Writable> extends ArrayList<E> implements Writable { Class<E> type = null; public ArrayListWritable(Class<E> type){ super(); this.type = type; } public ArrayListWritable(){ super(); } public void setArrayClassType(Class<E> clazz){ this.type = clazz; } @Override public void write(DataOutput out) throws IOException { if(type==null){ throw new IOException("Cannot write an " + getClass().getName() + " without the class type being set in the constructor or with setArrayClassType(...)"); }; out.writeUTF(type.getCanonicalName()); out.writeInt(size()); for(E writable : this) writable.write(out); } @SuppressWarnings("unchecked") @Override public void readFields(DataInput in) throws IOException { clear(); //Read the class name try { type = (Class<E>)Class.forName(in.readUTF()); } catch (ClassNotFoundException e) { throw new IOException("Invalid connonical name read from input bytes", e); } //Read the size & set capacity of the arraylist int size = in.readInt(); ensureCapacity(size); //Read in individual writables for (int i = 0; i < size; i++) { Writable value = WritableFactories.newInstance(type); value.readFields(in); // read a value add((E)value); // add it to the ArrayList } } } -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira