我正在定义一个自定义可写类型,目前我有这样的东西:
public static class MyType implements Writable {
private int value1;
private String value2;
// ... override code etc
}
我应该使用整数和字符串还是应该使用 intWritable 和 Text?我看到的示例倾向于使用我采用的方法,但是使用 Writable 类型似乎可以提高效率。
这很好,因为您正在通过覆盖读写来进行序列化。您可以编写原语,如ints
使用readInt()
orwriteInt()
等与其他原语或字符串。
Text
例如主要用于有LongWritables
一些可以使用的内置类型。如果您需要组合对象,则可以使用原语非常好,Text
或者LongWritable
只是一种可序列化的包装器。
您可以使用 int、string 等。这很好。并且当您实现 Writable 时,您将需要覆盖readFields(DataInput in)
和 write(DataOutput out)
方法。您将需要以相同的顺序读取写入变量。这就是序列化发生的地方。而且您无需费心制作可写类型的变量。
我倾向于编写像 Text 这样的 Writables,因为在这些类中已经对 I/O 进行了一些重要的优化。但是,最好的办法是两种方式都尝试一下,看看哪一种表现更好。