T - The type of objects coded by this Coder.IntermediateT - The type of objects a T will be converted to for coding.public class DelegateCoder<T,IntermediateT> extends CustomCoder<T>
DelegateCoder<T, IntermediateT> wraps a Coder for IntermediateT and
encodes/decodes values of type Ts by converting
to/from IntermediateT and then encoding/decoding using the underlying
Coder<IntermediateT>.
The conversions from T to IntermediateT and vice versa
must be supplied as DelegateCoder.CodingFunction, a serializable
function that may throw any Exception. If a thrown
exception is an instance of CoderException or
IOException, it will be re-thrown, otherwise it will be wrapped as
a CoderException.
| Modifier and Type | Class and Description |
|---|---|
static interface |
DelegateCoder.CodingFunction<InputT,OutputT>
A
CodingFunction<InputT, OutputT> is a serializable function
from InputT to OutputT that
may throw any Exception. |
Coder.Context, Coder.NonDeterministicException| Modifier | Constructor and Description |
|---|---|
protected |
DelegateCoder(Coder<IntermediateT> coder,
DelegateCoder.CodingFunction<T,IntermediateT> toFn,
DelegateCoder.CodingFunction<IntermediateT,T> fromFn) |
| Modifier and Type | Method and Description |
|---|---|
T |
decode(InputStream inStream,
Coder.Context context)
Decodes a value of type
T from the given input stream in
the given context. |
void |
encode(T value,
OutputStream outStream,
Coder.Context context)
Encodes the given value of type
T onto the given output stream
in the given context. |
Collection<String> |
getAllowedEncodings()
A collection of encodings supported by
Coder.decode(java.io.InputStream, com.google.cloud.dataflow.sdk.coders.Coder.Context) in addition to the value of
StandardCoder.getEncodingId(). |
Coder<IntermediateT> |
getCoder()
Returns the coder used to encode/decode the intermediate values produced/consumed by the
coding functions of this
DelegateCoder. |
String |
getEncodingId()
The encoding id for the binary format of the delegate coder is a combination of the underlying
coder class and its encoding id.
|
static <T,IntermediateT> |
of(Coder<IntermediateT> coder,
DelegateCoder.CodingFunction<T,IntermediateT> toFn,
DelegateCoder.CodingFunction<IntermediateT,T> fromFn) |
Object |
structuralValue(T value)
Returns an object with an
Object.equals() method that represents structural equality
on the argument. |
String |
toString() |
void |
verifyDeterministic()
A delegate coder is deterministic if the underlying coder is deterministic.
|
asCloudObject, ofgetCoderArguments, getInstanceComponentsconsistentWithEquals, equals, getComponents, getEncodedElementByteSize, hashCode, isRegisterByteSizeObserverCheap, registerByteSizeObserver, verifyDeterministic, verifyDeterministicprotected DelegateCoder(Coder<IntermediateT> coder, DelegateCoder.CodingFunction<T,IntermediateT> toFn, DelegateCoder.CodingFunction<IntermediateT,T> fromFn)
public static <T,IntermediateT> DelegateCoder<T,IntermediateT> of(Coder<IntermediateT> coder, DelegateCoder.CodingFunction<T,IntermediateT> toFn, DelegateCoder.CodingFunction<IntermediateT,T> fromFn)
public void encode(T value, OutputStream outStream, Coder.Context context) throws CoderException, IOException
CoderT onto the given output stream
in the given context.CoderException - if the value could not be encoded for some reasonIOException - if writing to the OutputStream fails
for some reasonpublic T decode(InputStream inStream, Coder.Context context) throws CoderException, IOException
CoderT from the given input stream in
the given context. Returns the decoded value.CoderException - if the value could not be decoded for some reasonIOException - if reading from the InputStream fails
for some reasonpublic Coder<IntermediateT> getCoder()
DelegateCoder.public void verifyDeterministic()
throws Coder.NonDeterministicException
CodingFunction<T, IntermediateT> must
also be deterministic.verifyDeterministic in interface Coder<T>verifyDeterministic in class CustomCoder<T>Coder.NonDeterministicException - if this coder is not deterministic.public Object structuralValue(T value) throws Exception
CoderObject.equals() method that represents structural equality
on the argument.
For any two values x and y of type T, if their encoded bytes are the
same, then it must be the case that structuralValue(x).equals(@code structuralValue(y).
Most notably:
null should be a proper object with
an equals() method, even if the input value is null.
See also Coder.consistentWithEquals().
structuralValue in interface Coder<T>structuralValue in class StandardCoder<T>Exceptionpublic String toString()
toString in class StandardCoder<T>public String getEncodingId()
Note that this omits any description of the coding functions. These should be modified with care.
getEncodingId in interface Coder<T>getEncodingId in class CustomCoder<T>StandardCoder.getAllowedEncodings()public Collection<String> getAllowedEncodings()
StandardCoderCoder.decode(java.io.InputStream, com.google.cloud.dataflow.sdk.coders.Coder.Context) in addition to the value of
StandardCoder.getEncodingId().
By default, this is empty.
getAllowedEncodings in interface Coder<T>getAllowedEncodings in class StandardCoder<T>StandardCoder.getEncodingId()