- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试实现可写类,但如果在我的类中有嵌套对象(例如列表等),我不知道如何实现可写类。有人可以帮助我吗?谢谢
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;
}
}
以下是 Field 类:
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;
}
}
最佳答案
序列化集合非常简单。
@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
。
关于java - 如何在 Hadoop 中自定义 Writable 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7994438/
本文整理了Java中org.apache.crunch.types.writable.Writables.writables()方法的一些代码示例,展示了Writables.writables()的具
本文整理了Java中org.datavec.api.writable.Writable.toInt()方法的一些代码示例,展示了Writable.toInt()的具体用法。这些代码示例主要来源于Git
本文整理了Java中org.datavec.api.writable.Writable.toDouble()方法的一些代码示例,展示了Writable.toDouble()的具体用法。这些代码示例主要
本文整理了Java中org.datavec.api.writable.Writable.toFloat()方法的一些代码示例,展示了Writable.toFloat()的具体用法。这些代码示例主要来源
本文整理了Java中org.datavec.api.writable.Writable.toLong()方法的一些代码示例,展示了Writable.toLong()的具体用法。这些代码示例主要来源于G
本文整理了Java中org.apache.crunch.types.writable.Writables.bytes()方法的一些代码示例,展示了Writables.bytes()的具体用法。这些代码
本文整理了Java中org.apache.crunch.types.writable.Writables.derived()方法的一些代码示例,展示了Writables.derived()的具体用法。
本文整理了Java中org.apache.crunch.types.writable.Writables.booleans()方法的一些代码示例,展示了Writables.booleans()的具体用
本文整理了Java中org.apache.crunch.types.writable.Writables.longs()方法的一些代码示例,展示了Writables.longs()的具体用法。这些代码
本文整理了Java中org.apache.crunch.types.writable.Writables.triples()方法的一些代码示例,展示了Writables.triples()的具体用法。
本文整理了Java中org.apache.crunch.types.writable.Writables.nulls()方法的一些代码示例,展示了Writables.nulls()的具体用法。这些代码
本文整理了Java中org.apache.crunch.types.writable.Writables.records()方法的一些代码示例,展示了Writables.records()的具体用法。
本文整理了Java中org.apache.crunch.types.writable.Writables.collections()方法的一些代码示例,展示了Writables.collections
本文整理了Java中org.apache.crunch.types.writable.Writables.quads()方法的一些代码示例,展示了Writables.quads()的具体用法。这些代码
本文整理了Java中org.apache.crunch.types.writable.Writables.doubles()方法的一些代码示例,展示了Writables.doubles()的具体用法。
本文整理了Java中org.apache.crunch.types.writable.Writables.tableOf()方法的一些代码示例,展示了Writables.tableOf()的具体用法。
本文整理了Java中org.apache.crunch.types.writable.Writables.strings()方法的一些代码示例,展示了Writables.strings()的具体用法。
本文整理了Java中org.apache.crunch.types.writable.Writables.pairs()方法的一些代码示例,展示了Writables.pairs()的具体用法。这些代码
本文整理了Java中org.apache.crunch.types.writable.Writables.tuples()方法的一些代码示例,展示了Writables.tuples()的具体用法。这些
本文整理了Java中org.apache.crunch.types.writable.Writables.floats()方法的一些代码示例,展示了Writables.floats()的具体用法。这些
我是一名优秀的程序员,十分优秀!