public final class BinaryArrayData extends BinarySection implements ArrayData
ArrayData which is backed by MemorySegments.
This class provides a way to store array data in a binary format that is compact and
efficient. It uses MemorySegments to manage the binary representation of the data,
allowing for efficient storage and access.
The binary layout of BinaryArrayData is structured as follows:
[size(int)] + [null bits(4-byte word boundaries)] + [values or offset&length] + [variable length part].
The header size is calculated based on the number of elements in the array, ensuring efficient alignment and access.
For fields that hold fixed-length primitive types, such as long, double, or int, they are stored compactly in bytes, just like the original Java array.
The class also provides methods to convert the binary data back into Java primitive arrays, handling various types such as boolean, byte, short, int, long, float, and double.
ArrayData.ElementGetteroffset, segments, sizeInBytesHIGHEST_FIRST_BIT, HIGHEST_SECOND_TO_EIGHTH_BIT, MAX_FIX_PART_DATA_SIZE| 构造器和说明 |
|---|
BinaryArrayData() |
| 限定符和类型 | 方法和说明 |
|---|---|
boolean |
anyNull() |
static int |
calculateFixLengthPartSize(DataType type)
It store real value when type is primitive.
|
static int |
calculateHeaderInBytes(int numFields)
Calculates the size of the header in bytes for an array with the specified number of fields.
|
BinaryArrayData |
copy() |
BinaryArrayData |
copy(BinaryArrayData reuse) |
static BinaryArrayData |
fromPrimitiveArray(boolean[] arr) |
static BinaryArrayData |
fromPrimitiveArray(byte[] arr) |
static BinaryArrayData |
fromPrimitiveArray(double[] arr) |
static BinaryArrayData |
fromPrimitiveArray(float[] arr) |
static BinaryArrayData |
fromPrimitiveArray(int[] arr) |
static BinaryArrayData |
fromPrimitiveArray(long[] arr) |
static BinaryArrayData |
fromPrimitiveArray(short[] arr) |
ArrayData |
getArray(int pos)
Returns the array value at the given position.
|
byte[] |
getBinary(int pos)
Returns the binary value at the given position.
|
boolean |
getBoolean(int pos)
Returns the boolean value at the given position.
|
byte |
getByte(int pos)
Returns the byte value at the given position.
|
DecimalData |
getDecimal(int pos,
int precision,
int scale)
Returns the decimal value at the given position.
|
double |
getDouble(int pos)
Returns the double value at the given position.
|
float |
getFloat(int pos)
Returns the float value at the given position.
|
int |
getInt(int pos)
Returns the integer value at the given position.
|
LocalZonedTimestampData |
getLocalZonedTimestamp(int pos,
int precision)
Returns the local zoned timestamp value at the given position.
|
long |
getLong(int pos)
Returns the long value at the given position.
|
MapData |
getMap(int pos)
Returns the map value at the given position.
|
RecordData |
getRecord(int pos,
int numFields)
Returns the record value at the given position.
|
short |
getShort(int pos)
Returns the short value at the given position.
|
StringData |
getString(int pos)
Returns the string value at the given position.
|
TimestampData |
getTimestamp(int pos,
int precision)
Returns the timestamp value at the given position.
|
ZonedTimestampData |
getZonedTimestamp(int pos,
int precision)
Returns the zoned timestamp value at the given position.
|
int |
hashCode() |
boolean |
isNullAt(int pos)
Returns true if the element is null at the given position.
|
void |
pointTo(org.apache.flink.core.memory.MemorySegment[] segments,
int offset,
int sizeInBytes) |
void |
setBoolean(int pos,
boolean value) |
void |
setByte(int pos,
byte value) |
void |
setDecimal(int pos,
DecimalData value,
int precision) |
void |
setDouble(int pos,
double value) |
void |
setFloat(int pos,
float value) |
void |
setInt(int pos,
int value) |
void |
setLong(int pos,
long value) |
void |
setNotNullAt(int pos) |
void |
setNullAt(int pos) |
void |
setNullBoolean(int pos) |
void |
setNullByte(int pos) |
void |
setNullDouble(int pos) |
void |
setNullFloat(int pos) |
void |
setNullInt(int pos) |
void |
setNullLong(int pos) |
void |
setNullShort(int pos) |
void |
setShort(int pos,
short value) |
void |
setTimestamp(int pos,
TimestampData value,
int precision) |
int |
size()
Returns the number of elements in this array.
|
boolean[] |
toBooleanArray() |
byte[] |
toByteArray() |
double[] |
toDoubleArray() |
float[] |
toFloatArray() |
int[] |
toIntArray() |
long[] |
toLongArray() |
<T> T[] |
toObjectArray(DataType elementType) |
short[] |
toShortArray() |
equals, getOffset, getSegments, getSizeInBytes, pointTocreateElementGetterpublic static int calculateHeaderInBytes(int numFields)
The header consists of:
The size of the bitmap is determined by the number of elements in the array:
The formula for calculating the size of the header is:
header size = 4 bytes (for array size) + ((numFields + 31) / 32) * 4 bytes (for null bitmap)
numFields - the number of elements in the arraypublic static int calculateFixLengthPartSize(DataType type)
public int size()
ArrayDatapublic void pointTo(org.apache.flink.core.memory.MemorySegment[] segments,
int offset,
int sizeInBytes)
pointTo 在类中 BinarySectionpublic boolean isNullAt(int pos)
ArrayDatapublic void setNullAt(int pos)
public void setNotNullAt(int pos)
public long getLong(int pos)
ArrayDatapublic void setLong(int pos,
long value)
public void setNullLong(int pos)
public int getInt(int pos)
ArrayDatapublic void setInt(int pos,
int value)
public void setNullInt(int pos)
public StringData getString(int pos)
ArrayDatapublic DecimalData getDecimal(int pos, int precision, int scale)
ArrayDataThe precision and scale are required to determine whether the decimal value was stored in
a compact representation (see DecimalData).
getDecimal 在接口中 ArrayDatapublic TimestampData getTimestamp(int pos, int precision)
ArrayDataThe precision is required to determine whether the timestamp value was stored in a compact
representation (see TimestampData).
getTimestamp 在接口中 ArrayDatapublic LocalZonedTimestampData getLocalZonedTimestamp(int pos, int precision)
ArrayDataThe precision is required to determine whether the timestamp value was stored in a compact
representation (see LocalZonedTimestampData).
getLocalZonedTimestamp 在接口中 ArrayDatapublic ZonedTimestampData getZonedTimestamp(int pos, int precision)
ArrayDataThe precision is required to determine whether the timestamp value was stored in a compact
representation (see ZonedTimestampData).
getZonedTimestamp 在接口中 ArrayDatapublic byte[] getBinary(int pos)
ArrayDatapublic ArrayData getArray(int pos)
ArrayDatapublic MapData getMap(int pos)
ArrayDatapublic RecordData getRecord(int pos, int numFields)
ArrayDataThe number of fields is required to correctly extract the row.
public boolean getBoolean(int pos)
ArrayDatagetBoolean 在接口中 ArrayDatapublic void setBoolean(int pos,
boolean value)
public void setNullBoolean(int pos)
public byte getByte(int pos)
ArrayDatapublic void setByte(int pos,
byte value)
public void setNullByte(int pos)
public short getShort(int pos)
ArrayDatapublic void setShort(int pos,
short value)
public void setNullShort(int pos)
public float getFloat(int pos)
ArrayDatapublic void setFloat(int pos,
float value)
public void setNullFloat(int pos)
public double getDouble(int pos)
ArrayDatapublic void setDouble(int pos,
double value)
public void setNullDouble(int pos)
public void setDecimal(int pos,
DecimalData value,
int precision)
public void setTimestamp(int pos,
TimestampData value,
int precision)
public boolean anyNull()
public boolean[] toBooleanArray()
toBooleanArray 在接口中 ArrayDatapublic byte[] toByteArray()
toByteArray 在接口中 ArrayDatapublic short[] toShortArray()
toShortArray 在接口中 ArrayDatapublic int[] toIntArray()
toIntArray 在接口中 ArrayDatapublic long[] toLongArray()
toLongArray 在接口中 ArrayDatapublic float[] toFloatArray()
toFloatArray 在接口中 ArrayDatapublic double[] toDoubleArray()
toDoubleArray 在接口中 ArrayDatapublic <T> T[] toObjectArray(DataType elementType)
public BinaryArrayData copy()
public BinaryArrayData copy(BinaryArrayData reuse)
public int hashCode()
hashCode 在类中 BinarySectionpublic static BinaryArrayData fromPrimitiveArray(boolean[] arr)
public static BinaryArrayData fromPrimitiveArray(byte[] arr)
public static BinaryArrayData fromPrimitiveArray(short[] arr)
public static BinaryArrayData fromPrimitiveArray(int[] arr)
public static BinaryArrayData fromPrimitiveArray(long[] arr)
public static BinaryArrayData fromPrimitiveArray(float[] arr)
public static BinaryArrayData fromPrimitiveArray(double[] arr)
Copyright © 2025 The Apache Software Foundation. All rights reserved.