我正在定义一个自定义可写类型,目前我有这样的东西:
public static class MyType implements Writable {
private int value1;
private String value2;
// ... override code etc
}
我应该使用 int 和 String 还是应该使用 intWriable 和 Text?我看到的示例倾向于使用我采用的方法,但似乎使用可写类型可以更有效率。
使用int,string等。这完全没问题。在实现可写时,您需要覆盖readFields(DataInput in)
和write(DataOutput out)
方法。您需要以相同的顺序读取写入变量。这就是序列化发生的地方。而且您无需费力地制作可写类型的变量。
这完全没问题,因为您是通过覆盖读写来进行序列化的。您可以使用readInt()
或writeInt()
等其他基元或字符串编写ints
等基元。
例如,Text
和LongWritables
主要用于具有一些可以使用的内置类型。如果你需要组合对象,你可以使用基元,Text
或LongWritable
只不过是一种可序列化的包装器。
我倾向于像文本一样编写可写内容,因为这些类中已经对 I/O 进行了一些大量优化。 但是,最好的办法是尝试两种方式,看看哪一种表现更好。