Class StreamOutput
java.lang.Object
java.io.OutputStream
org.elasticsearch.common.io.stream.StreamOutput
- All Implemented Interfaces:
java.io.Closeable,java.io.Flushable,java.lang.AutoCloseable
- Direct Known Subclasses:
BufferedChecksumStreamOutput,BytesStream,DataOutputStreamOutput,OutputStreamStreamOutput
public abstract class StreamOutput
extends java.io.OutputStream
A stream from another node to this node. Technically, it can also be streamed from a byte array but that is mostly for testing.
This class's methods are optimized so you can put the methods that read and write a class next to each other and you can scan them
visually for differences. That means that most variables should be read and written in a single line so even large objects fit both
reading and writing on the screen. It also means that the methods on this class are named very similarly to
StreamInput. Finally
it means that the "barrier to entry" for adding new methods to this class is relatively low even though it is a shared class with code
everywhere. That being said, this class deals primarily with Lists rather than Arrays. For the most part calls should adapt to
lists, either by storing Lists internally or just converting to and from a List when calling. This comment is repeated
on StreamInput.-
Constructor Summary
Constructors Constructor Description StreamOutput() -
Method Summary
Modifier and Type Method Description static voidcheckWriteable(java.lang.Object value)abstract voidclose()Closes this stream to further operations.abstract voidflush()Forces any buffered output to be written.java.util.Set<java.lang.String>getFeatures()VersiongetVersion()The version of the node on the other side of this stream.booleanhasFeature(java.lang.String feature)Test if the stream has the specified feature.longposition()abstract voidreset()voidseek(long position)voidsetFeatures(java.util.Set<java.lang.String> features)Set the features on the stream.voidsetVersion(Version version)Set the version of the node on the other side of this stream.voidwrite(byte[] b, int off, int len)voidwrite(int b)<T> voidwriteArray(Writeable.Writer<T> writer, T[] array)Writes the specified array to the stream using the specifiedWriteable.Writerfor each element in the array.<T extends Writeable>
voidwriteArray(T[] array)Writes the specified array ofWriteables.voidwriteBoolean(boolean b)Writes a boolean.abstract voidwriteByte(byte b)Writes a single byte.voidwriteByteArray(byte[] b)Writes an array of bytes.voidwriteBytes(byte[] b)Writes an array of bytes.voidwriteBytes(byte[] b, int length)Writes an array of bytes.abstract voidwriteBytes(byte[] b, int offset, int length)Writes an array of bytes.voidwriteBytesRef(org.apache.lucene.util.BytesRef bytes)voidwriteBytesReference(BytesReference bytes)Writes the bytes reference, including a length header.voidwriteCollection(java.util.Collection<? extends Writeable> collection)Writes a collection to this stream.<T> voidwriteCollection(java.util.Collection<T> collection, Writeable.Writer<T> writer)Writes a collection of objects via aWriteable.Writer.voidwriteDouble(double v)voidwriteDoubleArray(double[] values)<E extends java.lang.Enum<E>>
voidwriteEnum(E enumValue)Writes an enum with type E based on its ordinal value<E extends java.lang.Enum<E>>
voidwriteEnumSet(java.util.EnumSet<E> enumSet)Writes an EnumSet with type E that by serialized it based on it's ordinal valuevoidwriteException(java.lang.Throwable throwable)voidwriteFloat(float v)voidwriteFloatArray(float[] values)voidwriteGenericValue(java.lang.Object value)Notice: when serialization a map, the stream out map with the stream in map maybe have the different key-value orders, they will maybe have different stream order.voidwriteGeoPoint(GeoPoint geoPoint)Writes the givenGeoPointto the streamvoidwriteInstant(java.time.Instant instant)Writes anInstantto the stream with nanosecond resolutionvoidwriteInt(int i)Writes an int as four bytes.voidwriteIntArray(int[] values)voidwriteList(java.util.List<? extends Writeable> list)Writes a list ofWriteableobjectsvoidwriteLong(long i)Writes a long as eight bytes.voidwriteLongArray(long[] values)voidwriteMap(java.util.Map<java.lang.String,java.lang.Object> map)<K, V> voidwriteMap(java.util.Map<K,V> map, Writeable.Writer<K> keyWriter, Writeable.Writer<V> valueWriter)Write aMapofK-type keys toV-type.<K, V> voidwriteMapOfLists(java.util.Map<K,java.util.List<V>> map, Writeable.Writer<K> keyWriter, Writeable.Writer<V> valueWriter)Write aMapofK-type keys toV-typeLists.voidwriteMapWithConsistentOrder(java.util.Map<java.lang.String,? extends java.lang.Object> map)write map to stream with consistent order to make sure every map generated bytes order are same.voidwriteNamedWriteable(NamedWriteable namedWriteable)Writes aNamedWriteableto the current stream, by first writing its name and then the object itselfvoidwriteNamedWriteableList(java.util.List<? extends NamedWriteable> list)Writes a list ofNamedWriteableobjects.<T> voidwriteOptionalArray(Writeable.Writer<T> writer, T[] array)Same aswriteArray(Writer, Object[])but the provided array may be null.<T extends Writeable>
voidwriteOptionalArray(T[] array)Same aswriteArray(Writeable[])but the provided array may be null.voidwriteOptionalBoolean(java.lang.Boolean b)voidwriteOptionalBytesReference(BytesReference bytes)Writes an optional bytes reference including a length header.voidwriteOptionalDouble(java.lang.Double v)voidwriteOptionalFloat(java.lang.Float floatValue)voidwriteOptionalInstant(java.time.Instant instant)Writes anInstantto the stream, which could possibly be nullvoidwriteOptionalInt(java.lang.Integer integer)Writes an optionalInteger.voidwriteOptionalLong(java.lang.Long l)voidwriteOptionalNamedWriteable(NamedWriteable namedWriteable)Write an optionalNamedWriteableto the stream.voidwriteOptionalSecureString(SecureString secureStr)voidwriteOptionalString(java.lang.String str)voidwriteOptionalStringArray(java.lang.String[] array)Writes a string array, for nullable string, writes false.voidwriteOptionalStringCollection(java.util.Collection<java.lang.String> collection)Writes an optional collection of a strings.voidwriteOptionalText(Text text)voidwriteOptionalTimeValue(TimeValue timeValue)Write an optionalTimeValueto the stream.voidwriteOptionalTimeZone(org.joda.time.DateTimeZone timeZone)Write an optional DateTimeZone to the stream.voidwriteOptionalVInt(java.lang.Integer integer)voidwriteOptionalVLong(java.lang.Long l)voidwriteOptionalWriteable(Writeable writeable)voidwriteOptionalZoneId(java.time.ZoneId timeZone)Write an optional ZoneId to the stream.voidwriteSecureString(SecureString secureStr)voidwriteShort(short v)voidwriteString(java.lang.String str)voidwriteStringArray(java.lang.String[] array)voidwriteStringArrayNullable(java.lang.String[] array)Writes a string array, for nullable string, writes it as 0 (empty string).voidwriteStringCollection(java.util.Collection<java.lang.String> collection)Writes a collection of a strings.voidwriteText(Text text)voidwriteTimeValue(TimeValue timeValue)Write aTimeValueto the streamvoidwriteTimeZone(org.joda.time.DateTimeZone timeZone)Write a DateTimeZone to the stream.voidwriteVInt(int i)Writes an int in a variable-length format.voidwriteVIntArray(int[] values)voidwriteVLong(long i)Writes a non-negative long in a variable-length format.voidwriteVLongArray(long[] values)voidwriteZLong(long i)Writes a long in a variable-length format.voidwriteZoneId(java.time.ZoneId timeZone)Write a ZoneId to the stream.
-
Constructor Details
-
StreamOutput
public StreamOutput()
-
-
Method Details
-
getVersion
The version of the node on the other side of this stream. -
setVersion
Set the version of the node on the other side of this stream. -
hasFeature
public boolean hasFeature(java.lang.String feature)Test if the stream has the specified feature. Features are used when serializingClusterState.CustomorMetadata.Custom; see alsoClusterState.FeatureAware.- Parameters:
feature- the feature to test- Returns:
- true if the stream has the specified feature
-
setFeatures
public void setFeatures(java.util.Set<java.lang.String> features)Set the features on the stream. SeehasFeature(String).- Parameters:
features- the features on the stream
-
getFeatures
public java.util.Set<java.lang.String> getFeatures() -
position
public long position() throws java.io.IOException- Throws:
java.io.IOException
-
seek
public void seek(long position) throws java.io.IOException- Throws:
java.io.IOException
-
writeByte
public abstract void writeByte(byte b) throws java.io.IOExceptionWrites a single byte.- Throws:
java.io.IOException
-
writeBytes
public void writeBytes(byte[] b) throws java.io.IOExceptionWrites an array of bytes.- Parameters:
b- the bytes to write- Throws:
java.io.IOException
-
writeBytes
public void writeBytes(byte[] b, int length) throws java.io.IOExceptionWrites an array of bytes.- Parameters:
b- the bytes to writelength- the number of bytes to write- Throws:
java.io.IOException
-
writeBytes
public abstract void writeBytes(byte[] b, int offset, int length) throws java.io.IOExceptionWrites an array of bytes.- Parameters:
b- the bytes to writeoffset- the offset in the byte arraylength- the number of bytes to write- Throws:
java.io.IOException
-
writeByteArray
public void writeByteArray(byte[] b) throws java.io.IOExceptionWrites an array of bytes.- Parameters:
b- the bytes to write- Throws:
java.io.IOException
-
writeBytesReference
Writes the bytes reference, including a length header.- Throws:
java.io.IOException
-
writeOptionalBytesReference
Writes an optional bytes reference including a length header. Use this if you need to differentiate between null and empty bytes references. UsewriteBytesReference(BytesReference)andStreamInput.readBytesReference()if you do not.- Throws:
java.io.IOException
-
writeBytesRef
public void writeBytesRef(org.apache.lucene.util.BytesRef bytes) throws java.io.IOException- Throws:
java.io.IOException
-
writeShort
public final void writeShort(short v) throws java.io.IOException- Throws:
java.io.IOException
-
writeInt
public void writeInt(int i) throws java.io.IOExceptionWrites an int as four bytes.- Throws:
java.io.IOException
-
writeVInt
public void writeVInt(int i) throws java.io.IOExceptionWrites an int in a variable-length format. Writes between one and five bytes. Smaller values take fewer bytes. Negative numbers will always use all 5 bytes and are therefore better serialized usingwriteInt(int)- Throws:
java.io.IOException
-
writeLong
public void writeLong(long i) throws java.io.IOExceptionWrites a long as eight bytes.- Throws:
java.io.IOException
-
writeVLong
public void writeVLong(long i) throws java.io.IOExceptionWrites a non-negative long in a variable-length format. Writes between one and ten bytes. Smaller values take fewer bytes. Negative numbers use ten bytes and trip assertions (if running in tests) so preferwriteLong(long)orwriteZLong(long)for negative numbers.- Throws:
java.io.IOException
-
writeOptionalVLong
- Throws:
java.io.IOException
-
writeZLong
public void writeZLong(long i) throws java.io.IOExceptionWrites a long in a variable-length format. Writes between one and ten bytes. Values are remapped by sliding the sign bit into the lsb and then encoded as an unsigned number e.g., 0 -;> 0, -1 -;> 1, 1 -;> 2, ..., Long.MIN_VALUE -;> -1, Long.MAX_VALUE -;> -2 Numbers with small absolute value will have a small encoding If the numbers are known to be non-negative, usewriteVLong(long)- Throws:
java.io.IOException
-
writeOptionalLong
- Throws:
java.io.IOException
-
writeOptionalString
- Throws:
java.io.IOException
-
writeOptionalSecureString
- Throws:
java.io.IOException
-
writeOptionalInt
Writes an optionalInteger.- Throws:
java.io.IOException
-
writeOptionalVInt
- Throws:
java.io.IOException
-
writeOptionalFloat
- Throws:
java.io.IOException
-
writeOptionalText
- Throws:
java.io.IOException
-
writeText
- Throws:
java.io.IOException
-
writeString
public void writeString(java.lang.String str) throws java.io.IOException- Throws:
java.io.IOException
-
writeSecureString
- Throws:
java.io.IOException
-
writeFloat
public void writeFloat(float v) throws java.io.IOException- Throws:
java.io.IOException
-
writeDouble
public void writeDouble(double v) throws java.io.IOException- Throws:
java.io.IOException
-
writeOptionalDouble
- Throws:
java.io.IOException
-
writeBoolean
public void writeBoolean(boolean b) throws java.io.IOExceptionWrites a boolean.- Throws:
java.io.IOException
-
writeOptionalBoolean
- Throws:
java.io.IOException
-
flush
public abstract void flush() throws java.io.IOExceptionForces any buffered output to be written.- Specified by:
flushin interfacejava.io.Flushable- Overrides:
flushin classjava.io.OutputStream- Throws:
java.io.IOException
-
close
public abstract void close() throws java.io.IOExceptionCloses this stream to further operations.- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Overrides:
closein classjava.io.OutputStream- Throws:
java.io.IOException
-
reset
public abstract void reset() throws java.io.IOException- Throws:
java.io.IOException
-
write
public void write(int b) throws java.io.IOException- Specified by:
writein classjava.io.OutputStream- Throws:
java.io.IOException
-
write
public void write(byte[] b, int off, int len) throws java.io.IOException- Overrides:
writein classjava.io.OutputStream- Throws:
java.io.IOException
-
writeStringArray
public void writeStringArray(java.lang.String[] array) throws java.io.IOException- Throws:
java.io.IOException
-
writeStringArrayNullable
public void writeStringArrayNullable(@Nullable java.lang.String[] array) throws java.io.IOExceptionWrites a string array, for nullable string, writes it as 0 (empty string).- Throws:
java.io.IOException
-
writeOptionalStringArray
public void writeOptionalStringArray(@Nullable java.lang.String[] array) throws java.io.IOExceptionWrites a string array, for nullable string, writes false.- Throws:
java.io.IOException
-
writeMap
public void writeMap(@Nullable java.util.Map<java.lang.String,java.lang.Object> map) throws java.io.IOException- Throws:
java.io.IOException
-
writeMapWithConsistentOrder
public void writeMapWithConsistentOrder(@Nullable java.util.Map<java.lang.String,? extends java.lang.Object> map) throws java.io.IOExceptionwrite map to stream with consistent order to make sure every map generated bytes order are same. This method is compatible withStreamInput.readMapandStreamInput.readGenericValueThis method only will handle the map keys order, not maps contained within the map- Throws:
java.io.IOException
-
writeMapOfLists
public final <K, V> void writeMapOfLists(java.util.Map<K,java.util.List<V>> map, Writeable.Writer<K> keyWriter, Writeable.Writer<V> valueWriter) throws java.io.IOExceptionWrite aMapofK-type keys toV-typeLists.Map<String, List<String>> map = ...; out.writeMapOfLists(map, StreamOutput::writeString, StreamOutput::writeString);- Parameters:
keyWriter- The key writervalueWriter- The value writer- Throws:
java.io.IOException
-
writeMap
public final <K, V> void writeMap(java.util.Map<K,V> map, Writeable.Writer<K> keyWriter, Writeable.Writer<V> valueWriter) throws java.io.IOExceptionWrite aMapofK-type keys toV-type.Map<String, String> map = ...; out.writeMap(map, StreamOutput::writeString, StreamOutput::writeString);- Parameters:
keyWriter- The key writervalueWriter- The value writer- Throws:
java.io.IOException
-
writeInstant
public final void writeInstant(java.time.Instant instant) throws java.io.IOExceptionWrites anInstantto the stream with nanosecond resolution- Throws:
java.io.IOException
-
writeOptionalInstant
public final void writeOptionalInstant(@Nullable java.time.Instant instant) throws java.io.IOExceptionWrites anInstantto the stream, which could possibly be null- Throws:
java.io.IOException
-
writeGenericValue
Notice: when serialization a map, the stream out map with the stream in map maybe have the different key-value orders, they will maybe have different stream order. If want to keep stream out map and stream in map have the same stream order when stream, can usewriteMapWithConsistentOrder- Throws:
java.io.IOException
-
checkWriteable
public static void checkWriteable(@Nullable java.lang.Object value) throws java.lang.IllegalArgumentException- Throws:
java.lang.IllegalArgumentException
-
writeIntArray
public void writeIntArray(int[] values) throws java.io.IOException- Throws:
java.io.IOException
-
writeVIntArray
public void writeVIntArray(int[] values) throws java.io.IOException- Throws:
java.io.IOException
-
writeLongArray
public void writeLongArray(long[] values) throws java.io.IOException- Throws:
java.io.IOException
-
writeVLongArray
public void writeVLongArray(long[] values) throws java.io.IOException- Throws:
java.io.IOException
-
writeFloatArray
public void writeFloatArray(float[] values) throws java.io.IOException- Throws:
java.io.IOException
-
writeDoubleArray
public void writeDoubleArray(double[] values) throws java.io.IOException- Throws:
java.io.IOException
-
writeArray
Writes the specified array to the stream using the specifiedWriteable.Writerfor each element in the array. This method can be seen as writer version ofStreamInput.readArray(Writeable.Reader, IntFunction). The length of array encoded as a variable-length integer is first written to the stream, and then the elements of the array are written to the stream.- Type Parameters:
T- the type of the elements of the array- Parameters:
writer- the writer used to write individual elementsarray- the array- Throws:
java.io.IOException- if an I/O exception occurs while writing the array
-
writeOptionalArray
public <T> void writeOptionalArray(Writeable.Writer<T> writer, @Nullable T[] array) throws java.io.IOExceptionSame aswriteArray(Writer, Object[])but the provided array may be null. An additional boolean value is serialized to indicate whether the array was null or not.- Throws:
java.io.IOException
-
writeArray
Writes the specified array ofWriteables. This method can be seen as writer version ofStreamInput.readArray(Writeable.Reader, IntFunction). The length of array encoded as a variable-length integer is first written to the stream, and then the elements of the array are written to the stream.- Throws:
java.io.IOException
-
writeOptionalArray
public <T extends Writeable> void writeOptionalArray(@Nullable T[] array) throws java.io.IOExceptionSame aswriteArray(Writeable[])but the provided array may be null. An additional boolean value is serialized to indicate whether the array was null or not.- Throws:
java.io.IOException
-
writeOptionalWriteable
- Throws:
java.io.IOException
-
writeException
public void writeException(java.lang.Throwable throwable) throws java.io.IOException- Throws:
java.io.IOException
-
writeNamedWriteable
Writes aNamedWriteableto the current stream, by first writing its name and then the object itself- Throws:
java.io.IOException
-
writeOptionalNamedWriteable
public void writeOptionalNamedWriteable(@Nullable NamedWriteable namedWriteable) throws java.io.IOExceptionWrite an optionalNamedWriteableto the stream.- Throws:
java.io.IOException
-
writeGeoPoint
Writes the givenGeoPointto the stream- Throws:
java.io.IOException
-
writeTimeZone
public void writeTimeZone(org.joda.time.DateTimeZone timeZone) throws java.io.IOExceptionWrite a DateTimeZone to the stream.- Throws:
java.io.IOException
-
writeZoneId
public void writeZoneId(java.time.ZoneId timeZone) throws java.io.IOExceptionWrite a ZoneId to the stream.- Throws:
java.io.IOException
-
writeOptionalTimeZone
public void writeOptionalTimeZone(@Nullable org.joda.time.DateTimeZone timeZone) throws java.io.IOExceptionWrite an optional DateTimeZone to the stream.- Throws:
java.io.IOException
-
writeOptionalZoneId
Write an optional ZoneId to the stream.- Throws:
java.io.IOException
-
writeCollection
public void writeCollection(java.util.Collection<? extends Writeable> collection) throws java.io.IOExceptionWrites a collection to this stream. The corresponding collection can be read from a stream input usingStreamInput.readList(Writeable.Reader).- Parameters:
collection- the collection to write to this stream- Throws:
java.io.IOException- if an I/O exception occurs writing the collection
-
writeList
Writes a list ofWriteableobjects- Throws:
java.io.IOException
-
writeCollection
public <T> void writeCollection(java.util.Collection<T> collection, Writeable.Writer<T> writer) throws java.io.IOExceptionWrites a collection of objects via aWriteable.Writer.- Parameters:
collection- the collection of objects- Throws:
java.io.IOException- if an I/O exception occurs writing the collection
-
writeStringCollection
public void writeStringCollection(java.util.Collection<java.lang.String> collection) throws java.io.IOExceptionWrites a collection of a strings. The corresponding collection can be read from a stream input usingStreamInput.readList(Writeable.Reader).- Parameters:
collection- the collection of strings- Throws:
java.io.IOException- if an I/O exception occurs writing the collection
-
writeOptionalStringCollection
public void writeOptionalStringCollection(java.util.Collection<java.lang.String> collection) throws java.io.IOExceptionWrites an optional collection of a strings. The corresponding collection can be read from a stream input usingStreamInput.readList(Writeable.Reader).- Parameters:
collection- the collection of strings- Throws:
java.io.IOException- if an I/O exception occurs writing the collection
-
writeNamedWriteableList
public void writeNamedWriteableList(java.util.List<? extends NamedWriteable> list) throws java.io.IOExceptionWrites a list ofNamedWriteableobjects.- Throws:
java.io.IOException
-
writeEnum
public <E extends java.lang.Enum<E>> void writeEnum(E enumValue) throws java.io.IOExceptionWrites an enum with type E based on its ordinal value- Throws:
java.io.IOException
-
writeEnumSet
public <E extends java.lang.Enum<E>> void writeEnumSet(java.util.EnumSet<E> enumSet) throws java.io.IOExceptionWrites an EnumSet with type E that by serialized it based on it's ordinal value- Throws:
java.io.IOException
-
writeTimeValue
Write aTimeValueto the stream- Throws:
java.io.IOException
-
writeOptionalTimeValue
Write an optionalTimeValueto the stream.- Throws:
java.io.IOException
-