package com.alimama.mdrill.index.utils; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.zip.CRC32; import org.apache.hadoop.io.Writable; public class DocumentMap implements Writable { private String[] data =new String[0]; @Override public String toString() { return "DocumentMap [data=" + Arrays.toString(data) + "]"; } public int setMap(ArrayList<HashMap<String, String>> list,String[] fields) { HashMap<String, String> rtn=new HashMap<String, String>(); for(int i=0;i<data.length&&i<fields.length;i++) { if(data[i]!=null) { rtn.put(fields[i], data[i]); } } if(rtn.size()<=0) { return 0; } CRC32 crc32 = new CRC32(); crc32.update(java.util.UUID.randomUUID().toString().getBytes()); rtn.put("higo_uuid", Long.toString(crc32.getValue())); list.add(rtn); return 1; } public DocumentMap() { data=new String[0]; } public DocumentMap(String[] l) { this.data=l; } @Override public void readFields(DataInput in) throws IOException { int size = in.readInt(); data=new String[size]; for(int i=0;i<size;i++) { if(in.readBoolean()) { int len=in.readInt(); byte[] bytes=new byte[len]; in.readFully(bytes); data[i]=new String(bytes,"utf8"); }else{ data[i]=null; } } } @Override public void write(DataOutput out) throws IOException { out.writeInt(data.length); for(int i=0;i<data.length;i++) { if(data[i]==null) { out.writeBoolean(false); }else{ out.writeBoolean(true); byte[] arr=data[i].getBytes("utf8"); out.writeInt(arr.length); out.write(arr); } } } }