java.lang.Object
java.io.OutputStream
org.elasticsearch.common.io.stream.StreamOutput
- All Implemented Interfaces:
Closeable,Flushable,AutoCloseable
- Direct Known Subclasses:
BufferedChecksumStreamOutput,BytesRefStreamOutput,BytesStream,CountingStreamOutput,DataOutputStreamOutput,OutputStreamStreamOutput,VersionCheckingStreamOutput
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.-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidcheckWriteable(Object value) abstract voidclose()Closes this stream to further operations.abstract voidflush()Forces any buffered output to be written.The transport version to serialize the data as.voidlegacyWriteWithSizePrefix(Writeable writeable) Deprecated.longposition()static intputVInt(byte[] buffer, int i, int off) voidsetTransportVersion(TransportVersion version) Set the transport version of the data in 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.voidwriteBigInteger(BigInteger bigInteger) Write aBigIntegerto the streamvoidwriteBoolean(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) voidWrites the bytes reference, including a length header.voidwriteCollection(Collection<? extends Writeable> collection) Writes a collection which can then be read usingStreamInput.readCollectionAsList(org.elasticsearch.common.io.stream.Writeable.Reader<T>)or anotherreadCollectionAs*method.<T> voidwriteCollection(Collection<T> collection, Writeable.Writer<T> writer) Writes a collection which can then be read usingStreamInput.readCollectionAsList(org.elasticsearch.common.io.stream.Writeable.Reader<T>)or anotherreadCollectionAs*method.voidwriteDouble(double v) voidwriteDoubleArray(double[] values) voidwriteDoubleLE(double v) <E extends Enum<E>>
voidwriteEnum(E enumValue) Writes an enum with typeEin terms of the value of its ordinal.<E extends Enum<E>>
voidwriteEnumSet(EnumSet<E> enumSet) Writes a set of enum with typeEin terms of the value of its ordinal.voidwriteException(Throwable throwable) voidwriteFloat(float v) voidwriteFloatArray(float[] values) <T> voidwriteGenericList(List<T> v, Writeable.Writer<T> writer) voidwriteGenericMap(Map<String, Object> map) voidvoidwriteGenericString(String value) voidwriteGenericValue(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 streamfinal voidwriteInstant(Instant instant) Writes anInstantto the stream with nanosecond resolutionvoidwriteInt(int i) Writes an int as four bytes.voidwriteIntArray(int[] values) voidwriteIntLE(int i) Writes an int as four bytes, least significant bytes first.voidwriteLong(long i) Writes a long as eight bytes.voidwriteLongArray(long[] values) voidwriteLongLE(long i) Writes a long as eight bytes.final <V> voidwriteMap(Map<String, V> map, Writeable.Writer<V> valueWriter) Same aswriteMap(Map, Writer, Writer)but forStringkeys.final <K,V> void writeMap(Map<K, V> map, Writeable.Writer<K> keyWriter, Writeable.Writer<V> valueWriter) final <V extends Writeable>
voidwriteMapValues(Map<?, V> map) Writes values of a map as a collectionfinal <V> voidwriteMapValues(Map<?, V> map, Writeable.Writer<V> valueWriter) Writes values of a map as a collectionvoidwriteMapWithConsistentOrder(Map<String, ? extends Object> map) write map to stream with consistent order to make sure every map generated bytes order are same.voidSimilar towriteOptionalString(java.lang.String)but for use when the value is always missing.<T extends Writeable>
voidwriteMissingWriteable(Class<T> ignored) Similar towriteOptionalWriteable(org.elasticsearch.common.io.stream.Writeable)but for use when the value is always missing.voidwriteNamedWriteable(NamedWriteable namedWriteable) Writes aNamedWriteableto the current stream, by first writing its name and then the object itselfvoidwriteNamedWriteableCollection(Collection<? extends NamedWriteable> list) Writes a collection ofNamedWriteableobjects which can then be read usingStreamInput.readNamedWriteableCollectionAsList(java.lang.Class<T>).<T> voidwriteOptional(Writeable.Writer<T> writer, T maybeItem) Writes a boolean value indicating whether the given object isnull, followed by the object's serialization if it is notnull.<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.voidvoidwriteOptionalByteArray(byte[] array) Writes a byte array, for null arrays it writes false.voidWrites an optional bytes reference including a length header.<T extends Writeable>
voidwriteOptionalCollection(Collection<T> collection) Writes a possibly-nullcollection which can then be read usingStreamInput.readOptionalCollectionAsList(org.elasticsearch.common.io.stream.Writeable.Reader<T>).<T> voidwriteOptionalCollection(Collection<T> collection, Writeable.Writer<T> writer) Writes a possibly-nullcollection which can then be read usingStreamInput.readOptionalCollectionAsList(org.elasticsearch.common.io.stream.Writeable.Reader<T>).void<E extends Enum<E>>
voidwriteOptionalEnum(E enumValue) Writes an optional enum with typeEin terms of the value of its ordinal.voidwriteOptionalFloat(Float floatValue) voidwriteOptionalFloatArray(float[] array) Writes a float array, for null arrays it writes false.final voidwriteOptionalInstant(Instant instant) Writes anInstantto the stream, which could possibly be nullvoidwriteOptionalInt(Integer integer) Writes an optionalInteger.voidvoidwriteOptionalNamedWriteable(NamedWriteable namedWriteable) Write an optionalNamedWriteableto the stream.voidwriteOptionalSecureString(SecureString secureStr) voidvoidwriteOptionalStringArray(String[] array) Writes a string array, for nullable string, writes false.voidwriteOptionalStringCollection(Collection<String> collection) Writes a possibly-nullcollection of strings which can then be read usingStreamInput.readOptionalStringCollectionAsList().voidwriteOptionalText(Text text) voidwriteOptionalTimeValue(TimeValue timeValue) Write an optionalTimeValueto the stream.voidwriteOptionalVInt(Integer integer) voidvoidwriteOptionalWriteable(Writeable writeable) Writes a boolean value indicating whether the given object isnull, followed by the object's serialization if it is notnull.voidwriteOptionalZoneId(ZoneId timeZone) Write an optional ZoneId to the stream.voidwriteSecureString(SecureString secureStr) final voidwriteShort(short v) voidwriteString(String str) voidwriteStringArray(String[] array) voidwriteStringArrayNullable(String[] array) Writes a string array, for nullable string, writes it as 0 (empty string).voidwriteStringCollection(Collection<String> collection) Writes a collection of strings which can then be read usingStreamInput.readStringCollectionAsList()or anotherreadStringCollectionAs*method.voidvoidwriteTimeValue(TimeValue timeValue) Write aTimeValueto the streamvoidwriteVInt(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) voidwriteWithSizePrefix(Writeable writeable) Serializes a writable just likeWriteable.writeTo(StreamOutput)would but also compresses and prefixes it with the serialized size of the result.voidwriteWriteable(Writeable writeable) This method allow to use a method reference when writing collection elements such asout.writeMap(map, StreamOutput::writeString, StreamOutput::writeWriteable)voidwriteZLong(long i) Writes a long in a variable-length format.voidwriteZoneId(ZoneId timeZone) Write a ZoneId to the stream.Methods inherited from class java.io.OutputStream
nullOutputStream, write
-
Field Details
-
GENERIC_LIST_HEADER
public static final byte GENERIC_LIST_HEADER- See Also:
-
-
Constructor Details
-
StreamOutput
public StreamOutput()
-
-
Method Details
-
getTransportVersion
The transport version to serialize the data as. -
setTransportVersion
Set the transport version of the data in this stream. -
position
- Throws:
IOException
-
writeByte
Writes a single byte.- Throws:
IOException
-
writeBytes
Writes an array of bytes.- Parameters:
b- the bytes to write- Throws:
IOException
-
writeBytes
Writes an array of bytes.- Parameters:
b- the bytes to writelength- the number of bytes to write- Throws:
IOException
-
writeBytes
Writes an array of bytes.- Parameters:
b- the bytes to writeoffset- the offset in the byte arraylength- the number of bytes to write- Throws:
IOException
-
writeByteArray
Writes an array of bytes.- Parameters:
b- the bytes to write- Throws:
IOException
-
legacyWriteWithSizePrefix
Deprecated.Serializes a writable just likeWriteable.writeTo(StreamOutput)would but prefixes it with the serialized size of the result.- Parameters:
writeable-Writeableto serialize- Throws:
IOException
-
writeWithSizePrefix
Serializes a writable just likeWriteable.writeTo(StreamOutput)would but also compresses and prefixes it with the serialized size of the result.- Parameters:
writeable-Writeableto serialize- Throws:
IOException
-
writeBytesReference
Writes the bytes reference, including a length header.- Throws:
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:
IOException
-
writeBytesRef
- Throws:
IOException
-
writeShort
- Throws:
IOException
-
writeInt
Writes an int as four bytes.- Throws:
IOException
-
writeIntLE
Writes an int as four bytes, least significant bytes first.- Throws:
IOException
-
writeVInt
Writes 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:
IOException
-
putVInt
public static int putVInt(byte[] buffer, int i, int off) -
writeLong
Writes a long as eight bytes.- Throws:
IOException
-
writeLongLE
Writes a long as eight bytes.- Throws:
IOException
-
writeVLong
Writes 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:
IOException
-
writeOptionalVLong
- Throws:
IOException
-
writeZLong
Writes 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:
IOException
-
writeOptionalLong
- Throws:
IOException
-
writeOptionalString
- Throws:
IOException
-
writeOptionalSecureString
- Throws:
IOException
-
writeOptionalInt
Writes an optionalInteger.- Throws:
IOException
-
writeOptionalVInt
- Throws:
IOException
-
writeOptionalFloat
- Throws:
IOException
-
writeOptionalText
- Throws:
IOException
-
writeText
- Throws:
IOException
-
writeString
- Throws:
IOException
-
writeSecureString
- Throws:
IOException
-
writeFloat
- Throws:
IOException
-
writeDouble
- Throws:
IOException
-
writeDoubleLE
- Throws:
IOException
-
writeOptionalDouble
- Throws:
IOException
-
writeBoolean
Writes a boolean.- Throws:
IOException
-
writeOptionalBoolean
- Throws:
IOException
-
flush
Forces any buffered output to be written.- Specified by:
flushin interfaceFlushable- Overrides:
flushin classOutputStream- Throws:
IOException
-
close
Closes this stream to further operations.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classOutputStream- Throws:
IOException
-
write
- Specified by:
writein classOutputStream- Throws:
IOException
-
write
- Overrides:
writein classOutputStream- Throws:
IOException
-
writeStringArray
- Throws:
IOException
-
writeStringArrayNullable
Writes a string array, for nullable string, writes it as 0 (empty string).- Throws:
IOException
-
writeOptionalStringArray
Writes a string array, for nullable string, writes false.- Throws:
IOException
-
writeOptionalByteArray
Writes a byte array, for null arrays it writes false.- Parameters:
array- an array or null- Throws:
IOException
-
writeOptionalFloatArray
Writes a float array, for null arrays it writes false.- Parameters:
array- an array or null- Throws:
IOException
-
writeGenericMap
- Throws:
IOException
-
writeMapWithConsistentOrder
public void writeMapWithConsistentOrder(@Nullable Map<String, ? extends Object> map) throws 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:
IOException
-
writeMapValues
public final <V> void writeMapValues(Map<?, V> map, Writeable.Writer<V> valueWriter) throws IOExceptionWrites values of a map as a collection- Throws:
IOException
-
writeMapValues
Writes values of a map as a collection- Throws:
IOException
-
writeMap
public final <K extends Writeable,V extends Writeable> void writeMap(Map<K, V> map) throws IOException- Throws:
IOException
-
writeMap
public final <K,V> void writeMap(Map<K, V> map, Writeable.Writer<K> keyWriter, Writeable.Writer<V> valueWriter) throws 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:
IOException
-
writeMap
public final <V> void writeMap(Map<String, V> map, Writeable.Writer<V> valueWriter) throws IOExceptionSame aswriteMap(Map, Writer, Writer)but forStringkeys.- Throws:
IOException
-
writeInstant
Writes anInstantto the stream with nanosecond resolution- Throws:
IOException
-
writeOptionalInstant
Writes anInstantto the stream, which could possibly be null- Throws:
IOException
-
writeGenericList
- Throws:
IOException
-
writeGenericString
- Throws:
IOException
-
writeGenericNull
- Throws:
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:
IOException
-
checkWriteable
- Throws:
IllegalArgumentException
-
writeIntArray
- Throws:
IOException
-
writeVIntArray
- Throws:
IOException
-
writeLongArray
- Throws:
IOException
-
writeVLongArray
- Throws:
IOException
-
writeFloatArray
- Throws:
IOException
-
writeDoubleArray
- Throws:
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:
IOException- if an I/O exception occurs while writing the array
-
writeOptionalArray
public <T> void writeOptionalArray(Writeable.Writer<T> writer, @Nullable T[] array) throws IOException Same 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:
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:
IOException
-
writeOptionalArray
Same 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:
IOException
-
writeOptionalWriteable
Writes a boolean value indicating whether the given object isnull, followed by the object's serialization if it is notnull.- Throws:
IOException- See Also:
-
writeOptional
Writes a boolean value indicating whether the given object isnull, followed by the object's serialization if it is notnull.- Throws:
IOException- See Also:
-
writeWriteable
This method allow to use a method reference when writing collection elements such asout.writeMap(map, StreamOutput::writeString, StreamOutput::writeWriteable)- Throws:
IOException
-
writeException
- Throws:
IOException
-
writeNamedWriteable
Writes aNamedWriteableto the current stream, by first writing its name and then the object itself- Throws:
IOException
-
writeOptionalNamedWriteable
Write an optionalNamedWriteableto the stream.- Throws:
IOException
-
writeGeoPoint
Writes the givenGeoPointto the stream- Throws:
IOException
-
writeZoneId
Write a ZoneId to the stream.- Throws:
IOException
-
writeOptionalZoneId
Write an optional ZoneId to the stream.- Throws:
IOException
-
writeCollection
Writes a collection which can then be read usingStreamInput.readCollectionAsList(org.elasticsearch.common.io.stream.Writeable.Reader<T>)or anotherreadCollectionAs*method. Make sure to read the collection back into the same type as was originally written.- Throws:
IOException
-
writeCollection
public <T> void writeCollection(Collection<T> collection, Writeable.Writer<T> writer) throws IOException Writes a collection which can then be read usingStreamInput.readCollectionAsList(org.elasticsearch.common.io.stream.Writeable.Reader<T>)or anotherreadCollectionAs*method. Make sure to read the collection back into the same type as was originally written.- Throws:
IOException
-
writeStringCollection
Writes a collection of strings which can then be read usingStreamInput.readStringCollectionAsList()or anotherreadStringCollectionAs*method. Make sure to read the collection back into the same type as was originally written.- Throws:
IOException
-
writeOptionalCollection
public <T extends Writeable> void writeOptionalCollection(@Nullable Collection<T> collection) throws IOException Writes a possibly-nullcollection which can then be read usingStreamInput.readOptionalCollectionAsList(org.elasticsearch.common.io.stream.Writeable.Reader<T>).- Throws:
IOException
-
writeOptionalCollection
public <T> void writeOptionalCollection(@Nullable Collection<T> collection, Writeable.Writer<T> writer) throws IOException Writes a possibly-nullcollection which can then be read usingStreamInput.readOptionalCollectionAsList(org.elasticsearch.common.io.stream.Writeable.Reader<T>).- Throws:
IOException
-
writeOptionalStringCollection
public void writeOptionalStringCollection(@Nullable Collection<String> collection) throws IOException Writes a possibly-nullcollection of strings which can then be read usingStreamInput.readOptionalStringCollectionAsList().- Throws:
IOException
-
writeNamedWriteableCollection
public void writeNamedWriteableCollection(Collection<? extends NamedWriteable> list) throws IOException Writes a collection ofNamedWriteableobjects which can then be read usingStreamInput.readNamedWriteableCollectionAsList(java.lang.Class<T>).- Throws:
IOException
-
writeEnum
Writes an enum with typeEin terms of the value of its ordinal. Enums serialized like this must have a corresponding test which usesEnumSerializationTestUtils#assertEnumSerializationto fix the wire protocol.- Throws:
IOException
-
writeOptionalEnum
Writes an optional enum with typeEin terms of the value of its ordinal. Enums serialized like this must have a corresponding test which usesEnumSerializationTestUtils#assertEnumSerializationto fix the wire protocol.- Throws:
IOException
-
writeEnumSet
Writes a set of enum with typeEin terms of the value of its ordinal. Enums serialized like this must have a corresponding test which usesEnumSerializationTestUtils#assertEnumSerializationto fix the wire protocol.- Throws:
IOException
-
writeTimeValue
Write aTimeValueto the stream- Throws:
IOException
-
writeOptionalTimeValue
Write an optionalTimeValueto the stream.- Throws:
IOException
-
writeMissingWriteable
Similar towriteOptionalWriteable(org.elasticsearch.common.io.stream.Writeable)but for use when the value is always missing.- Throws:
IOException
-
writeMissingString
Similar towriteOptionalString(java.lang.String)but for use when the value is always missing.- Throws:
IOException
-
writeBigInteger
Write aBigIntegerto the stream- Throws:
IOException
-
writeWithSizePrefix(org.elasticsearch.common.io.stream.Writeable)instead