@Experimental(value=SCHEMAS) public abstract class RowCoderGenerator extends java.lang.Object
Coder
for Row
objects corresponding to a
specific schema. The resulting coder is loaded into the default ClassLoader and returned.
When generate(Schema)
is called, a new subclass of Coder<Row> is generated for the specified schema. This class is generated using low-level
bytecode generation, and hardcodes encodings for all fields of the Schema. Empirically, this is
30-40% faster than a coder that introspects the schema.
The generated class corresponds to the following Java class:
class SchemaRowCoder extends Coder<Row> {
// Generated array containing a coder for each field in the Schema.
private static final Coder[] FIELD_CODERS;
// Generated method to return the schema this class corresponds to. Used during code
// generation.
private static getSchema() {
return schema;
}
@Override
public void encode(T value, OutputStream outStream) {
// Delegate to a method that evaluates each coder in the static array.
encodeDelegate(FIELD_CODERS, value, outStream);
}
@Overide
public abstract T decode(InputStream inStream) {
// Delegate to a method that evaluates each coder in the static array.
return decodeDelegate(FIELD_CODERS, inStream);
}
}
Constructor and Description |
---|
RowCoderGenerator() |
Modifier and Type | Method and Description |
---|---|
static Coder<Row> |
generate(Schema schema) |