Class SerializableCoder<T extends java.io.Serializable>
- java.lang.Object
-
- org.apache.beam.sdk.coders.Coder<T>
-
- org.apache.beam.sdk.coders.CustomCoder<T>
-
- org.apache.beam.sdk.coders.SerializableCoder<T>
-
- Type Parameters:
T
- the type of elements handled by this coder
- All Implemented Interfaces:
java.io.Serializable
public class SerializableCoder<T extends java.io.Serializable> extends CustomCoder<T>
ACoder
for Java classes that implementSerializable
.SerializableCoder
should be used only for objects that have properObject.equals(java.lang.Object)
andObject.hashCode()
implementations.To use, specify the coder type on a PCollection:
PCollection<MyRecord> records = foo.apply(...).setCoder(SerializableCoder.of(MyRecord.class));
SerializableCoder
does not guarantee a deterministic encoding, as Java serialization may produce different binary encodings for two equivalent objects.- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
SerializableCoder.SerializableCoderProviderRegistrar
ACoderProviderRegistrar
which registers aCoderProvider
which can handle serializable types.-
Nested classes/interfaces inherited from class org.apache.beam.sdk.coders.Coder
Coder.Context, Coder.NonDeterministicException
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
SerializableCoder(java.lang.Class<T> type, TypeDescriptor<T> typeDescriptor)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
consistentWithEquals()
T
decode(java.io.InputStream inStream)
Decodes a value of typeT
from the given input stream in the given context.void
encode(T value, java.io.OutputStream outStream)
Encodes the given value of typeT
onto the given output stream.boolean
equals(@Nullable java.lang.Object other)
static CoderProvider
getCoderProvider()
Returns aCoderProvider
which uses theSerializableCoder
if possible for all types.TypeDescriptor<T>
getEncodedTypeDescriptor()
Returns theTypeDescriptor
for the type encoded.java.lang.Class<T>
getRecordType()
int
hashCode()
static <T extends java.io.Serializable>
SerializableCoder<T>of(java.lang.Class<T> clazz)
Returns aSerializableCoder
instance for the provided element class.static <T extends java.io.Serializable>
SerializableCoder<T>of(TypeDescriptor<T> type)
Returns aSerializableCoder
instance for the provided element type.java.lang.Object
structuralValue(T value)
The structural value of the object is the object itself.java.lang.String
toString()
void
verifyDeterministic()
ThrowCoder.NonDeterministicException
if the coding is not deterministic.-
Methods inherited from class org.apache.beam.sdk.coders.CustomCoder
getCoderArguments
-
Methods inherited from class org.apache.beam.sdk.coders.Coder
decode, encode, getEncodedElementByteSize, isRegisterByteSizeObserverCheap, registerByteSizeObserver, verifyDeterministic, verifyDeterministic
-
-
-
-
Constructor Detail
-
SerializableCoder
protected SerializableCoder(java.lang.Class<T> type, TypeDescriptor<T> typeDescriptor)
-
-
Method Detail
-
of
public static <T extends java.io.Serializable> SerializableCoder<T> of(TypeDescriptor<T> type)
Returns aSerializableCoder
instance for the provided element type.- Type Parameters:
T
- the element type
-
consistentWithEquals
public boolean consistentWithEquals()
Description copied from class:Coder
Returnstrue
if thisCoder
is injective with respect toObject.equals(java.lang.Object)
.Whenever the encoded bytes of two values are equal, then the original values are equal according to
Objects.equals()
. Note that this is well-defined fornull
.This condition is most notably false for arrays. More generally, this condition is false whenever
equals()
compares object identity, rather than performing a semantic/structural comparison.By default, returns false.
- Overrides:
consistentWithEquals
in classCoder<T extends java.io.Serializable>
-
structuralValue
public java.lang.Object structuralValue(T value)
The structural value of the object is the object itself. TheSerializableCoder
should be only used for objects with a properObject.equals(java.lang.Object)
implementation.- Overrides:
structuralValue
in classCoder<T extends java.io.Serializable>
-
of
public static <T extends java.io.Serializable> SerializableCoder<T> of(java.lang.Class<T> clazz)
Returns aSerializableCoder
instance for the provided element class.- Type Parameters:
T
- the element type
-
getCoderProvider
public static CoderProvider getCoderProvider()
Returns aCoderProvider
which uses theSerializableCoder
if possible for all types.This method is invoked reflectively from
DefaultCoder
.
-
getRecordType
public java.lang.Class<T> getRecordType()
-
encode
public void encode(T value, java.io.OutputStream outStream) throws java.io.IOException
Description copied from class:Coder
Encodes the given value of typeT
onto the given output stream.- Specified by:
encode
in classCoder<T extends java.io.Serializable>
- Throws:
java.io.IOException
- if writing to theOutputStream
fails for some reasonCoderException
- if the value could not be encoded for some reason
-
decode
public T decode(java.io.InputStream inStream) throws java.io.IOException, CoderException
Description copied from class:Coder
Decodes a value of typeT
from the given input stream in the given context. Returns the decoded value.- Specified by:
decode
in classCoder<T extends java.io.Serializable>
- Throws:
java.io.IOException
- if reading from theInputStream
fails for some reasonCoderException
- if the value could not be decoded for some reason
-
verifyDeterministic
public void verifyDeterministic() throws Coder.NonDeterministicException
ThrowCoder.NonDeterministicException
if the coding is not deterministic.In order for a
Coder
to be considered deterministic, the following must be true:- two values that compare as equal (via
Object.equals()
orComparable.compareTo()
, if supported) have the same encoding. - the
Coder
always produces a canonical encoding, which is the same for an instance of an object even if produced on different computers at different times.
- Overrides:
verifyDeterministic
in classCustomCoder<T extends java.io.Serializable>
- Throws:
Coder.NonDeterministicException
- always. Java serialization is not deterministic with respect toObject.equals(java.lang.Object)
for all types.
- two values that compare as equal (via
-
equals
public boolean equals(@Nullable java.lang.Object other)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
getEncodedTypeDescriptor
public TypeDescriptor<T> getEncodedTypeDescriptor()
Description copied from class:Coder
Returns theTypeDescriptor
for the type encoded.- Overrides:
getEncodedTypeDescriptor
in classCoder<T extends java.io.Serializable>
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-