blob: 06c61a22439ef964674ad923779966b1be6af7e9 [file] [log] [blame]
// SPDX-License-Identifier: LGPL-2.1-or-later
// Copyright (c) 2012-2014 Monty Program Ab
// Copyright (c) 2015-2021 MariaDB Corporation Ab
package org.mariadb.jdbc.client;
import org.mariadb.jdbc.MariaDbBlob;
/** Packet buffer interface */
public interface ReadableByteBuf {
/**
* buffer number of unread bytes
*
* @return remaining bytes number
*/
int readableBytes();
/**
* Current buffer position
*
* @return position
*/
int pos();
/**
* buffer
*
* @return buffer
*/
byte[] buf();
/**
* Reset buffer
*
* @param buf new buffer
* @param limit buffer limit
* @param pos initial position
*/
void buf(byte[] buf, int limit, int pos);
/**
* Set position
*
* @param pos new position
*/
void pos(int pos);
/** Skip one byte */
void skip();
/**
* Skip length value of bytes
*
* @param length number of position to skip
*/
void skip(int length);
/** Skip length encoded value */
void skipLengthEncoded();
/**
* Read Blob at current position
*
* @param length blob length
* @return Blob
*/
MariaDbBlob readBlob(int length);
/**
* Read byte from buffer at current position, without changing position
*
* @return byte value
*/
byte getByte();
/**
* Read byte from buffer at indicated index, without changing position
*
* @param index index
* @return byte value
*/
byte getByte(int index);
/**
* Read unsigned byte value at current position, without changing position
*
* @return short value
*/
short getUnsignedByte();
/**
* Read encoded length value that cannot be null see
* https://mariadb.com/kb/en/protocol-data-types/#length-encoded-integers
*
* @return encoded length
*/
long readLongLengthEncodedNotNull();
/**
* Read encoded length value that cannot be null see
* https://mariadb.com/kb/en/protocol-data-types/#length-encoded-integers
*
* <p>this is readLongLengthEncodedNotNull limited to 32 bits
*
* @return encoded length
*/
int readIntLengthEncodedNotNull();
/**
* Utility to skip length encoded string, returning initial position
*
* @return initial position
*/
int skipIdentifier();
/**
* Fast signed long parsing
*
* @param length data length
* @return long value
*/
long atoll(int length);
/**
* Fast unsigned long parsing
*
* @param length data length
* @return long value
*/
long atoull(int length);
/**
* Read encoded length value see
* https://mariadb.com/kb/en/protocol-data-types/#length-encoded-integers
*
* @return encoded length
*/
Integer readLength();
/**
* Read byte at current position, incrementing position
*
* @return byte at current position
*/
byte readByte();
/**
* Read unsigned byte value at current position
*
* @return short value
*/
short readUnsignedByte();
/**
* Read signed 2 bytes value (little endian) at current position
*
* @return short value
*/
short readShort();
/**
* Read unsigned 2 bytes value (little endian) at current position
*
* @return short value
*/
int readUnsignedShort();
/**
* Read signed 3 bytes value (little endian) at current position
*
* @return int value
*/
int readMedium();
/**
* Read unsigned 3 bytes value (little endian) at current position
*
* @return int value
*/
int readUnsignedMedium();
/**
* Read signed 4 bytes value (little endian) at current position
*
* @return int value
*/
int readInt();
/**
* Read signed 4 bytes value (big endian) at current position
*
* @return int value
*/
int readIntBE();
/**
* Read unsigned 4 bytes value (little endian) at current position
*
* @return long value
*/
long readUnsignedInt();
/**
* Read signed 8 bytes value (little endian) at current position
*
* @return long value
*/
long readLong();
/**
* Read unsigned 4 bytes value (big endian) at current position
*
* @return long value
*/
long readLongBE();
/**
* Read as many bytes to fill destination array
*
* @param dst destination array
*/
void readBytes(byte[] dst);
/**
* Read null-ended encoded bytes. 0x00 null value won't be in return byte, so position is
* incremented to returned byte array length + 1
*
* @return byte array
*/
byte[] readBytesNullEnd();
/**
* Return a length encoded buffer
*
* @return new buffer
*/
ReadableByteBuf readLengthBuffer();
/**
* Read utf-8 encoded string from length bytes
*
* @param length length byte to read
* @return string value
*/
String readString(int length);
/**
* Read ascii encoded string from length bytes
*
* @param length length byte to read
* @return string value
*/
String readAscii(int length);
/**
* Read null-ended utf-8 encoded string. 0x00 = null represent string ending. Position is
* incremented to returned string corresponding bytes + 1
*
* @return corresponding string
*/
String readStringNullEnd();
/**
* Return the utf-8 string represented by current position to the limit of buffer
*
* @return string value
*/
String readStringEof();
/**
* Read float encoded on 4 bytes value at current position
*
* @return float value
*/
float readFloat();
/**
* Read double encoded on 8 bytes value at current position
*
* @return double value
*/
double readDouble();
/**
* Read double encoded on 8 bytes (big endian) value at current position
*
* @return double value
*/
double readDoubleBE();
}