2011-11-03 11 views
13

मैं लिखने योग्य वर्ग को लागू करने की कोशिश कर रहा हूं, लेकिन मुझे कोई जानकारी नहीं है कि एक वर्ग के वर्ग को कैसे कार्यान्वित किया जाए, यदि मेरी कक्षा में घोंसला वाली वस्तु है, जैसे सूची, इत्यादि। क्या कोई भी शरीर मेरी मदद कर सकता है?हाडोप में लिखने योग्य वर्ग को कैसे अनुकूलित करें?

public final class Field implements Comparable<Field>, Serializable { 

    private String name; 
    private DataType dataType; 
    private Object value; 
    private FieldType fieldType; 


    public Field(){ 

    } 



    public Field(String name, DataType dataType, FieldType fieldType){ 
     this(name, dataType, null, fieldType); 
    } 

    public Field(String name, DataType type, Object value, FieldType fieldType){ 
     this.name = name; 
     this.dataType = type; 
     this.value = value; 
     this.fieldType = fieldType; 
    } 
} 





public enum FieldType { 
    PRI, LOOKUP, SCD, VERSION, OTHER 
} 



public enum DataType { 

    UNDEFINED(4) { 
     public int getSizeInBytes(Object value) { 
      return STRING.getSizeInBytes(value); 
     } 
    }, 

    STRING(4) { 
     public int getSizeInBytes(Object value) { 
      if (value == null) { 
       return 0; 
      } 
      return super.getSizeInBytes(value) + (value.toString().length() * 2); // length + chars 
     } 
    }, 

    INT(4), 
    LONG(8), 
    DOUBLE(8), 
    DATETIME(8), 
    BOOLEAN(1), 
    BYTE(1), 
    FLOAT(4), 
    SHORT(2), 
    CHAR(2), 
    DATE(8), 
    TIME(8), 

    BLOB(0) { 
     public int getSizeInBytes(Object value) { 
      if (value == null) { 
       return 0; 
      } 
      return ((byte[])value).length; 
     } 
    }; 

    private final int sizeInBytes; 

    private DataType(int sizeInBytes) { 
     this.sizeInBytes = sizeInBytes; 
    } 

    public int getSizeInBytes(Object value) { 
     return sizeInBytes; 
    } 

} 
+0

प्रयास करें, यह हार्डी समझा जा सकता है .. – JMelnik

उत्तर

17

संग्रह Serializing काफी सरल है: धन्यवाद

public class StorageClass implements Writable{ 

public String xStr; 
public String yStr; 

public List<Field> sStor 

//omitted ctors 


@override 
public void write(DataOutput out) throws IOException{ 
    out.writeChars(xStr); 
    out.WriteChars(yStr); 

    //WHAT SHOULD I DO FOR List<Field> 

} 

@override 
public void readFields(DataInput in) throws IOException{ 
    xStr = in.readLine(); 
    yStr = in.readLine(); 

    //WHAT SHOULD I DO FOR List<Field> 
} 

} 

public class SubStorage{ 
    public String x; 
    public String y; 
} 

} 

के बाद फील्ड वर्ग है।

@Override 
public void readFields(DataInput in) throws IOException { 
    int size = in.readInt(); 
    list= new ArrayList<Field>(size); 
    for(int i = 0; i < size; i++){ 
     Field f = new Field(); 
     f.readFields(in); 
     list.add(f); 
    } 
} 

@Override 
public void write(DataOutput out) throws IOException { 
    out.writeInt(list.size()); 
    for (Field l : list) { 
     l.write(out); 
    } 
} 

फील्ड Writable लागू करने के लिए भी है।

संबंधित मुद्दे