Module org.firebirdsql.jaybird
Package org.firebirdsql.gds.ng

# Class EncodingSpecificDatatypeCoder

java.lang.Object
org.firebirdsql.gds.ng.EncodingSpecificDatatypeCoder

All Implemented Interfaces:
  `DatatypeCoder`

public final class EncodingSpecificDatatypeCoder extends Object implements DatatypeCoder
Datatype coder wrapping another datatype coder and applying a specific encoding definition, while delegating other methods to the wrapped datatype coder.

Since:
  4
Author:
  Mark Rotteveel

## Field Summary

### Fields inherited from interface org.firebirdsql.gds.ng.DatatypeCoder

`FRACTIONS_PER_HOUR, FRACTIONS_PER_MILLISECOND, FRACTIONS_PER_MINUTE, FRACTIONS_PER_SECOND, NANOSECONDS_PER_FRACTION`

## Method Summary

Modifier and Type
Method
Description
`Reader`
`createReader(InputStream in)`
Creates a reader wrapping an input stream.
`Writer`
`createWriter(OutputStream out)`
Creates a writer wrapping an input stream.
`boolean`
`decodeBoolean(byte[] buf)`
Decode a boolean from `buf` from the first byte.
`Decimal128`
`decodeDecimal128(byte[] buf)`
Decodes a decimal128 from a byte array of 16 bytes.
`Decimal64`
`decodeDecimal64(byte[] buf)`
Decodes a decimal64 from a byte array of 8 bytes.
`double`
`decodeDouble(byte[] buf)`
Decode a double value from `buf` from the first 8 bytes.
`float`
`decodeFloat(byte[] buf)`
Decode a float value from `buf` from the first 4 bytes.
`int`
`decodeInt(byte[] buf)`
Decode an int value from `buf` from the first 4 bytes.
`int`
`decodeInt(byte[] buf, int off)`
Decode an int value from `buf` starting at offset `off` for 4 bytes.
`BigInteger`
`decodeInt128(byte[] buf)`
Decodes a BigInteger from a byte array of 16 bytes (int128 format).
`LocalDate`
`decodeLocalDate(byte[] buf)`
Decode `java.time.LocalDate` from `buf` from the first 4 bytes.
`LocalDate`
`decodeLocalDate(byte[] buf, int off)`
Decode `java.time.LocalDate` from `buf` from the 4 bytes starting at `off`.
`LocalDateTime`
`decodeLocalDateTime(byte[] buf)`
Decode `java.time.LocalDateTime` from `buf` from the first 8 bytes.
`LocalDateTime`
`decodeLocalDateTime(byte[] buf, int off)`
Decode `java.time.LocalDateTime` from `buf` from the 8 bytes starting at `off`.
`LocalTime`
`decodeLocalTime(byte[] buf)`
Decode `java.time.LocalTime` from `buf` from the first 4 bytes.
`LocalTime`
`decodeLocalTime(byte[] buf, int off)`
Decode `java.time.LocalTime` from `buf` from the 4 bytes starting at `off`.
`long`
`decodeLong(byte[] buf)`
Decode a long value from `buf` from the first 8 bytes.
`short`
`decodeShort(byte[] buf)`
Decode a short value from `buf` from the first `DatatypeCoder.sizeOfShort()` bytes.
`short`
`decodeShort(byte[] buf, int off)`
Decode a short value from `buf` starting at offset `off` for `DatatypeCoder.sizeOfShort()` bytes.
`String`
`decodeString(byte[] buf)`
Decode a `String` from `buf` using the encoding of this datatype coder.
`byte[]`
`encodeBoolean(boolean val)`
Encodes boolean as a byte array of 1 byte.
`byte[]`
`encodeDecimal128(Decimal128 val)`
Encodes a decimal128 as a byte array of 16 bytes.
`byte[]`
`encodeDecimal64(Decimal64 val)`
Encodes a decimal64 as a byte array of 8 bytes.
`byte[]`
`encodeDouble(double val)`
Encode a double value as a byte array of 8 bytes.
`byte[]`
`encodeFloat(float val)`
Encode a float value as a byte array of 4 bytes.
`byte[]`
`encodeInt(int val)`
Encode an int value as a byte array of 4 bytes.
`void`
`encodeInt(int val, byte[] buf, int off)`
Encode an int value into `buf` starting at index `off` for 4 bytes.
`byte[]`
`encodeInt128(BigInteger val)`
Encodes a BigInteger as a byte array of 16 bytes (int128 format).
`byte[]`
`encodeLocalDate(LocalDate val)`
Encode a `java.time.LocalDate` as a byte array of 4 bytes.
`void`
`encodeLocalDate(LocalDate val, byte[] buf, int off)`
Encode a `java.time.LocalDate` to a byte array, requiring 4 bytes.
`byte[]`
`encodeLocalDateTime(LocalDateTime val)`
Encode a `java.time.LocalDateTime` as a byte array of 8 bytes.
`void`
`encodeLocalDateTime(LocalDateTime val, byte[] buf, int off)`
Encode a `java.time.LocalDateTime` to a byte array, requiring 8 bytes.
`byte[]`
`encodeLocalTime(LocalTime val)`
Encode a `java.time.LocalTime` as a byte array of 4 bytes.
`void`
`encodeLocalTime(LocalTime val, byte[] buf, int off)`
Encode a `java.time.LocalTime` to a byte array, requiring 4 bytes.
`byte[]`
`encodeLong(long val)`
Encode a long value as a byte array of 8 bytes.
`byte[]`
`encodeShort(int val)`
Encode a short value as a byte array of length `DatatypeCoder.sizeOfShort()`.
`void`
`encodeShort(int val, byte[] buf, int off)`
Encode a short value into `buf` starting at offset `off` for `DatatypeCoder.sizeOfShort()` bytes.
`byte[]`
`encodeShort(short val)`
Encode a short value as a byte array of length `DatatypeCoder.sizeOfShort()`.
`byte[]`
`encodeString(String val)`
Encode a `String` value as a byte array using the encoding of this datatype coder.
`boolean`
`equals(Object o)`
`DatatypeCoder`
`forEncodingDefinition(EncodingDefinition encodingDefinition)`
Return a derived datatype coder that applies the supplied encoding definition for string conversions.
`Encoding`
`getEncoding()`
`EncodingDefinition`
`getEncodingDefinition()`
`IEncodingFactory`
`getEncodingFactory()`
`int`
`hashCode()`
`int`
`sizeOfShort()`
The size of an encoded short in this data type coder.
`DatatypeCoder`
`unwrap()`
Unwrap this datatype coder to its parent (or itself).

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

## Method Details

### encodeString

public byte[] encodeString(String val)
Description copied from interface: `DatatypeCoder`
Encode a `String` value as a byte array using the encoding of this datatype coder.

Specified by:
  `encodeString` in interface `DatatypeCoder`
Parameters:
  `val` - value to be encoded
Returns:
  `val` encoded as a byte array, or `null` if `val` is `null`

### createWriter

public Writer createWriter(OutputStream out)
Description copied from interface: `DatatypeCoder`
Creates a writer wrapping an input stream.

Specified by:
  `createWriter` in interface `DatatypeCoder`
Parameters:
  `out` - output stream
Returns:
  writer applying the encoding of this datatype when writing

### decodeString

public String decodeString(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decode a `String` from `buf` using the encoding of this datatype coder.

Specified by:
  `decodeString` in interface `DatatypeCoder`
Parameters:
  `buf` - byte array to be decoded
Returns:
  `String` decoded from `buf`, or `null` if `buf` is `null`

### createReader

public Reader createReader(InputStream in)
Description copied from interface: `DatatypeCoder`
Creates a reader wrapping an input stream.

Specified by:
  `createReader` in interface `DatatypeCoder`
Parameters:
  `in` - input stream
Returns:
  reader applying the encoding of this datatype coder when reading

### forEncodingDefinition

public DatatypeCoder forEncodingDefinition(EncodingDefinition encodingDefinition)
Description copied from interface: `DatatypeCoder`
Return a derived datatype coder that applies the supplied encoding definition for string conversions.

Specified by:
  `forEncodingDefinition` in interface `DatatypeCoder`
Parameters:
  `encodingDefinition` - encoding definition
Returns:
  derived datatype coder (this instance, if encoding definition is the same)

### getEncodingDefinition

public EncodingDefinition getEncodingDefinition()

Specified by:
  `getEncodingDefinition` in interface `DatatypeCoder`
Returns:
  encoding definition used by this datatype coder for string conversions.

### getEncoding

public Encoding getEncoding()

Specified by:
  `getEncoding` in interface `DatatypeCoder`
Returns:
  encoding used by this datatype coder for string conversions.

### unwrap

public DatatypeCoder unwrap()
Description copied from interface: `DatatypeCoder`
Unwrap this datatype coder to its parent (or itself).

Specified by:
  `unwrap` in interface `DatatypeCoder`
Returns:
  parent of this datatype code, or itself if it has no parent.

### equals

public boolean equals(Object o)
Description copied from interface: `DatatypeCoder`

Equality: same basic type (i.e.: wire protocol/JNA type + endianness) and same encoding definition.

This does not need to take into account the encoding factory, as usage should be limited to datatype coders derived from the same connection.

Specified by:
  `equals` in interface `DatatypeCoder`
Overrides:
  `equals` in class `Object`
Parameters:
  `o` - object to compare to
Returns:
  `true` if other is an equivalent datatype coder.

### hashCode

public int hashCode()

Specified by:
  `hashCode` in interface `DatatypeCoder`
Overrides:
  `hashCode` in class `Object`

### sizeOfShort

public int sizeOfShort()
Description copied from interface: `DatatypeCoder`
The size of an encoded short in this data type coder.

Specified by:
  `sizeOfShort` in interface `DatatypeCoder`
Returns:
  size of an encoded short (either `2` or `4` bytes)

### encodeShort

public byte[] encodeShort(short val)
Description copied from interface: `DatatypeCoder`
Encode a short value as a byte array of length `DatatypeCoder.sizeOfShort()`.

Specified by:
  `encodeShort` in interface `DatatypeCoder`
Parameters:
  `val` - value to be encoded
Returns:
  `val` encoded as a byte array

### encodeShort

public byte[] encodeShort(int val)
Description copied from interface: `DatatypeCoder`
Encode a short value as a byte array of length `DatatypeCoder.sizeOfShort()`.

Specified by:
  `encodeShort` in interface `DatatypeCoder`
Parameters:
  `val` - value to be encoded
Returns:
  `val` encoded as a byte array

### encodeShort

public void encodeShort(int val, byte[] buf, int off)
Description copied from interface: `DatatypeCoder`
Encode a short value into `buf` starting at offset `off` for `DatatypeCoder.sizeOfShort()` bytes.

NOTE: Implementations using 4 bytes to encode a short may choose to encode `val` (an int) as-is (which means the most significant two bytes can have a value other than 0x0000 or 0xFFFF, and a value of 0xFFFF (65_535) may be encoded as 0x0000_FFFF, and not as 0xFFFF_FFFF (-1). This behaviour may change at any time. For consistent behaviour, explicitly cast to short when calling this method.

Specified by:
  `encodeShort` in interface `DatatypeCoder`
Parameters:
  `val` - value to be encoded
  `buf` - byte array of sufficient size (warning: this is datatype coder specific, see `DatatypeCoder.sizeOfShort()`), never `null`
  `off` - offset to start encoding

### decodeShort

public short decodeShort(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decode a short value from `buf` from the first `DatatypeCoder.sizeOfShort()` bytes.

Specified by:
  `decodeShort` in interface `DatatypeCoder`
Parameters:
  `buf` - byte array of sufficient size (warning: this is datatype coder specific, see `DatatypeCoder.sizeOfShort()`)
Returns:
  short value from `buf`, or `0` when `buf` is `null`

### decodeShort

public short decodeShort(byte[] buf, int off)
Description copied from interface: `DatatypeCoder`
Decode a short value from `buf` starting at offset `off` for `DatatypeCoder.sizeOfShort()` bytes.

Specified by:
  `decodeShort` in interface `DatatypeCoder`
Parameters:
  `buf` - byte array of sufficient size (warning: this is datatype coder specific, see `DatatypeCoder.sizeOfShort()`), never `null`
  `off` - offset to start decoding
Returns:
  short value from `buf`

### encodeInt

public byte[] encodeInt(int val)
Description copied from interface: `DatatypeCoder`
Encode an int value as a byte array of 4 bytes.

Specified by:
  `encodeInt` in interface `DatatypeCoder`
Parameters:
  `val` - value to be encoded
Returns:
  `val` encoded as a byte array, or `0` when `buf` is `null`

### encodeInt

public void encodeInt(int val, byte[] buf, int off)
Description copied from interface: `DatatypeCoder`
Encode an int value into `buf` starting at index `off` for 4 bytes.

Specified by:
  `encodeInt` in interface `DatatypeCoder`
Parameters:
  `val` - value to be encoded
  `buf` - byte array of sufficient size, never `null`
  `off` - offset to start encoding

### decodeInt

public int decodeInt(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decode an int value from `buf` from the first 4 bytes.

Specified by:
  `decodeInt` in interface `DatatypeCoder`
Parameters:
  `buf` - byte array of sufficient size
Returns:
  int value decoded from `buf`, or `0` when `buf` is `null`

### decodeInt

public int decodeInt(byte[] buf, int off)
Description copied from interface: `DatatypeCoder`
Decode an int value from `buf` starting at offset `off` for 4 bytes.

Specified by:
  `decodeInt` in interface `DatatypeCoder`
Parameters:
  `buf` - byte array of sufficient size, never `null`
  `off` - offset to start decoding
Returns:
  int value decoded from `buf`

### encodeLong

public byte[] encodeLong(long val)
Description copied from interface: `DatatypeCoder`
Encode a long value as a byte array of 8 bytes.

Specified by:
  `encodeLong` in interface `DatatypeCoder`
Parameters:
  `val` - value to be encoded
Returns:
  `val` encoded as a byte array

### decodeLong

public long decodeLong(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decode a long value from `buf` from the first 8 bytes.

Specified by:
  `decodeLong` in interface `DatatypeCoder`
Parameters:
  `buf` - byte array of sufficient size, or `0` when `buf` is `null`
Returns:
  long value decoded from `buf`

### encodeFloat

public byte[] encodeFloat(float val)
Description copied from interface: `DatatypeCoder`
Encode a float value as a byte array of 4 bytes.

Specified by:
  `encodeFloat` in interface `DatatypeCoder`
Parameters:
  `val` - value to be encoded
Returns:
  `val` encoded as a byte array

### decodeFloat

public float decodeFloat(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decode a float value from `buf` from the first 4 bytes.

Specified by:
  `decodeFloat` in interface `DatatypeCoder`
Parameters:
  `buf` - byte array of sufficient size, or `0` when `buf` is `null`
Returns:
  float value decoded from `buf`

### encodeDouble

public byte[] encodeDouble(double val)
Description copied from interface: `DatatypeCoder`
Encode a double value as a byte array of 8 bytes.

Specified by:
  `encodeDouble` in interface `DatatypeCoder`
Parameters:
  `val` - value to be encoded
Returns:
  `val` encoded as a byte array

### decodeDouble

public double decodeDouble(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decode a double value from `buf` from the first 8 bytes.

Specified by:
  `decodeDouble` in interface `DatatypeCoder`
Parameters:
  `buf` - byte array of sufficient size, or `0` when `buf` is `null`
Returns:
  double value decoded from `buf`

### decodeBoolean

public boolean decodeBoolean(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decode a boolean from `buf` from the first byte.

Specified by:
  `decodeBoolean` in interface `DatatypeCoder`
Parameters:
  `buf` - (expected) 1 bytes
Returns:
  `false` when 0, `true` for all other values, or `false` if `buf` is `null`

### encodeBoolean

public byte[] encodeBoolean(boolean val)
Description copied from interface: `DatatypeCoder`
Encodes boolean as a byte array of 1 byte.

Specified by:
  `encodeBoolean` in interface `DatatypeCoder`
Parameters:
  `val` - value to encode
Returns:
  `true` as 1, `false` as 0.

### decodeLocalTime

public LocalTime decodeLocalTime(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decode `java.time.LocalTime` from `buf` from the first 4 bytes.

Specified by:
  `decodeLocalTime` in interface `DatatypeCoder`
Parameters:
  `buf` - (expected) at least 4 bytes
Returns:
  `LocalTime` decoded from `buf`, or `null` if `buf` is `null`

### decodeLocalTime

public LocalTime decodeLocalTime(byte[] buf, int off)
Description copied from interface: `DatatypeCoder`
Decode `java.time.LocalTime` from `buf` from the 4 bytes starting at `off`.

Specified by:
  `decodeLocalTime` in interface `DatatypeCoder`
Parameters:
  `buf` - (expected) at least 4 bytes from `off`, never `null`
  `off` - offset of the time value in `buf`
Returns:
  `LocalTime` decoded from `buf`

### encodeLocalTime

public byte[] encodeLocalTime(LocalTime val)
Description copied from interface: `DatatypeCoder`
Encode a `java.time.LocalTime` as a byte array of 4 bytes.

Specified by:
  `encodeLocalTime` in interface `DatatypeCoder`
Parameters:
  `val` - value to encode
Returns:
  `val` encoded as a byte array, or `null` if `val` is `null`

### encodeLocalTime

public void encodeLocalTime(LocalTime val, byte[] buf, int off)
Description copied from interface: `DatatypeCoder`
Encode a `java.time.LocalTime` to a byte array, requiring 4 bytes.

Specified by:
  `encodeLocalTime` in interface `DatatypeCoder`
Parameters:
  `val` - value to encode
  `buf` - byte array with at least 4 bytes starting at `off`, never `null`
  `off` - offset of the time value in `buf`

### decodeLocalDate

public LocalDate decodeLocalDate(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decode `java.time.LocalDate` from `buf` from the first 4 bytes.

Specified by:
  `decodeLocalDate` in interface `DatatypeCoder`
Parameters:
  `buf` - (expected) at least 4 bytes
Returns:
  `LocalDate` decoded from `buf`, or `null` if `buf` is `null`

### decodeLocalDate

public LocalDate decodeLocalDate(byte[] buf, int off)
Description copied from interface: `DatatypeCoder`
Decode `java.time.LocalDate` from `buf` from the 4 bytes starting at `off`.

Specified by:
  `decodeLocalDate` in interface `DatatypeCoder`
Parameters:
  `buf` - (expected) at least 4 bytes from `off`, never `null`
  `off` - offset of the time value in `buf`
Returns:
  `LocalDate` decoded from `buf`

### encodeLocalDate

public byte[] encodeLocalDate(LocalDate val)
Description copied from interface: `DatatypeCoder`
Encode a `java.time.LocalDate` as a byte array of 4 bytes.

Specified by:
  `encodeLocalDate` in interface `DatatypeCoder`
Parameters:
  `val` - value to encode
Returns:
  `val` encoded as a byte array, or `null` if `val` is `null`

### encodeLocalDate

public void encodeLocalDate(LocalDate val, byte[] buf, int off)
Description copied from interface: `DatatypeCoder`
Encode a `java.time.LocalDate` to a byte array, requiring 4 bytes.

Specified by:
  `encodeLocalDate` in interface `DatatypeCoder`
Parameters:
  `val` - value to encode
  `buf` - byte array with at least 4 bytes starting at `off`, never `null`
  `off` - offset of the date value in `buf`

### decodeLocalDateTime

public LocalDateTime decodeLocalDateTime(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decode `java.time.LocalDateTime` from `buf` from the first 8 bytes.

Specified by:
  `decodeLocalDateTime` in interface `DatatypeCoder`
Parameters:
  `buf` - (expected) at least 8 bytes
Returns:
  `LocalDateTime` decoded from `buf`, or `null` if `buf` is `null`

### decodeLocalDateTime

public LocalDateTime decodeLocalDateTime(byte[] buf, int off)
Description copied from interface: `DatatypeCoder`
Decode `java.time.LocalDateTime` from `buf` from the 8 bytes starting at `off`.

Specified by:
  `decodeLocalDateTime` in interface `DatatypeCoder`
Parameters:
  `buf` - (expected) at least 8 bytes from `off`, never `null`
  `off` - offset of the datetime value in `buf`
Returns:
  `LocalDateTime` decoded from `buf`

### encodeLocalDateTime

public byte[] encodeLocalDateTime(LocalDateTime val)
Description copied from interface: `DatatypeCoder`
Encode a `java.time.LocalDateTime` as a byte array of 8 bytes.

Specified by:
  `encodeLocalDateTime` in interface `DatatypeCoder`
Parameters:
  `val` - value to encode
Returns:
  `val` encoded as a byte array, or `null` if `val` is `null`

### encodeLocalDateTime

public void encodeLocalDateTime(LocalDateTime val, byte[] buf, int off)
Description copied from interface: `DatatypeCoder`
Encode a `java.time.LocalDateTime` to a byte array, requiring 8 bytes.

Specified by:
  `encodeLocalDateTime` in interface `DatatypeCoder`
Parameters:
  `val` - value to encode
  `buf` - byte array with at least 8 bytes starting at `off`, never `null`
  `off` - offset of the datetime value in `buf`

### decodeDecimal64

public Decimal64 decodeDecimal64(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decodes a decimal64 from a byte array of 8 bytes.

Specified by:
  `decodeDecimal64` in interface `DatatypeCoder`
Parameters:
  `buf` - data to decode (expects exactly 8 bytes)
Returns:
  Decimal64 decoded from `buf`, or `null` if `buf` is `null`

### encodeDecimal64

public byte[] encodeDecimal64(Decimal64 val)
Description copied from interface: `DatatypeCoder`
Encodes a decimal64 as a byte array of 8 bytes.

Specified by:
  `encodeDecimal64` in interface `DatatypeCoder`
Parameters:
  `val` - value to be encoded
Returns:
  `val` encoded as a byte array, or `null` if `val` is `null`

### decodeDecimal128

public Decimal128 decodeDecimal128(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decodes a decimal128 from a byte array of 16 bytes.

Specified by:
  `decodeDecimal128` in interface `DatatypeCoder`
Parameters:
  `buf` - data to decode (expects exactly 16 bytes)
Returns:
  Decimal128 decoded from `buf`, or `null` if `buf` is `null`

### encodeDecimal128

public byte[] encodeDecimal128(Decimal128 val)
Description copied from interface: `DatatypeCoder`
Encodes a decimal128 as a byte array of 16 bytes.

Specified by:
  `encodeDecimal128` in interface `DatatypeCoder`
Parameters:
  `val` - value to be encoded
Returns:
  `val` encoded as a byte array, or `null` if `val` is `null`

### decodeInt128

public BigInteger decodeInt128(byte[] buf)
Description copied from interface: `DatatypeCoder`
Decodes a BigInteger from a byte array of 16 bytes (int128 format).

Specified by:
  `decodeInt128` in interface `DatatypeCoder`
Parameters:
  `buf` - data to decode (expects exactly 16 bytes)
Returns:
  BigInteger decoded from `buf`, or `null` if `val` is `null`

### encodeInt128

public byte[] encodeInt128(BigInteger val)
Description copied from interface: `DatatypeCoder`
Encodes a BigInteger as a byte array of 16 bytes (int128 format).

The implementation expects to be passed a value that fits in 16 bytes. If a larger value is passed, an `IllegalArgumentException` is thrown.

Specified by:
  `encodeInt128` in interface `DatatypeCoder`
Parameters:
  `val` - value to be encoded
Returns:
  `val` encoded as a byte array, or `null` if `val` is `null`

### getEncodingFactory

public IEncodingFactory getEncodingFactory()

Specified by:
  `getEncodingFactory` in interface `DatatypeCoder`
Returns:
  encoding factory.