Package org.h2.mvstore

# Class DataUtils

java.lang.Object
org.h2.mvstore.DataUtils

public final class DataUtils extends Object
Utility methods

## Field Summary

Fields
Modifier and Type
Field
Description
`static final int`
`COMPRESSED_VAR_INT_MAX`
The maximum integer that needs less space when using variable size encoding (only 3 bytes instead of 4).
`static final long`
`COMPRESSED_VAR_LONG_MAX`
The maximum long that needs less space when using variable size encoding (only 7 bytes instead of 8).
`static final int`
`ERROR_BLOCK_NOT_FOUND`
The block in the stream store was not found.
`static final int`
`ERROR_CHUNK_NOT_FOUND`
The application was trying to read data from a chunk that is no longer available.
`static final int`
`ERROR_CLOSED`
The object is already closed.
`static final int`
`ERROR_FILE_CORRUPT`
The file is corrupt or (for encrypted files) the encryption key is wrong.
`static final int`
`ERROR_FILE_LOCKED`
The file is locked.
`static final int`
`ERROR_INTERNAL`
An internal error occurred.
`static final int`
`ERROR_READING_FAILED`
An error occurred while reading from the file.
`static final int`
`ERROR_SERIALIZATION`
An error occurred when serializing or de-serializing.
`static final int`
`ERROR_TOO_MANY_OPEN_TRANSACTIONS`
There are too many open transactions.
`static final int`
`ERROR_TRANSACTION_CORRUPT`
The transaction store is corrupt.
`static final int`
`ERROR_TRANSACTION_ILLEGAL_STATE`
The transaction store is in an illegal state (for example, not yet initialized).
`static final int`
`ERROR_TRANSACTION_LOCKED`
An entry is still locked by another transaction.
`static final int`
`ERROR_TRANSACTION_TOO_BIG`
The transaction contains too many changes.
`static final int`
`ERROR_TRANSACTIONS_DEADLOCK`
Deadlock discovered and one of transactions involved chosen as victim and rolled back.
`static final int`
`ERROR_UNKNOWN_DATA_TYPE`
The transaction store can not be initialized because data type is not found in type registry.
`static final int`
`ERROR_UNSUPPORTED_FORMAT`
The file format is not supported.
`static final int`
`ERROR_WRITING_FAILED`
An error occurred when trying to write to the file.
`static final String`
`LAYOUT_CHUNK`
The prefix for chunks ("chunk.").
`static final String`
`LAYOUT_ROOT`
The prefix for root positions of maps ("root.").
`static final String`
`META_MAP`
The prefix for maps ("map.").
`static final String`
`META_NAME`
The prefix for names ("name.").
`static final int`
`PAGE_COMPRESSED`
The bit mask for compressed pages (compression level fast).
`static final int`
`PAGE_COMPRESSED_HIGH`
The bit mask for compressed pages (compression level high).
`static final int`
`PAGE_LARGE`
The marker size of a very large page.
`static final int`
`PAGE_TYPE_LEAF`
The type for leaf page.
`static final int`
`PAGE_TYPE_NODE`
The type for node page.

## Constructor Summary

Constructors
Constructor
Description
`DataUtils()`

## Method Summary

Modifier and Type
Method
Description
`static void`
`appendMap(StringBuilder buff, String key, int value)`
Append a key-value pair to the string builder.
`static void`
`appendMap(StringBuilder buff, String key, long value)`
Append a key-value pair to the string builder.
`static void`
`appendMap(StringBuilder buff, String key, String value)`
Append a key-value pair to the string builder.
`static StringBuilder`
`appendMap(StringBuilder buff, HashMap<String,?> map)`
Append a map to the string builder, sorted by key.
`static void`
`checkArgument(boolean test, String message, Object... arguments)`
Throw an IllegalArgumentException if the argument is invalid.
`static long`
`composePagePos(int chunkId, int offset, int length, int type)`
Get the position of this page.
`static long`
`composePagePos(int chunkId, long tocElement)`
Convert tocElement into pagePos by replacing mapId with chunkId.
`static long`
`composeTocElement(int mapId, int offset, int length, int type)`
Create table of content element.
`static IOException`
`convertToIOException(Throwable e)`
Convert an exception to an IO exception.
`static <T> void`
`copyExcept(T[] src, T[] dst, int oldSize, int removeIndex)`
Copy the elements of an array, and remove one element.
`static <T> void`
`copyWithGap(T[] src, T[] dst, int oldSize, int gapIndex)`
Copy the elements of an array, with a gap.
`static int`
`decodePageLength(int code)`
Get the maximum length for the given code.
`static int`
`encodeLength(int len)`
Convert the length to a length code 0..31.
`static String`
`formatMessage(int errorCode, String message, Object... arguments)`
Format an error message.
`static short`
`getCheckValue(int x)`
Calculate a check value for the given integer.
`static int`
`getFletcher32(byte[] bytes, int offset, int length)`
Calculate the Fletcher32 checksum.
`static String`
`getFromMap(String s, String key)`
Parse a specified pair from key-value pair list.
`static String`
`getMapName(String s)`
Parse a name from key-value pair list.
`static int`
`getPageChunkId(long pos)`
Get the chunk id from the position.
`static int`
`getPageMapId(long tocElement)`
Get the map id from the chunk's table of content element.
`static int`
`getPageMaxLength(long pos)`
Get the maximum length for the given page position.
`static int`
`getPageOffset(long tocElement)`
Get the offset from the position.
`static int`
`getPageType(long pos)`
Get the page type from the position.
`static int`
`getVarIntLen(int x)`
Get the length of the variable size int.
`static int`
`getVarLongLen(long x)`
Get the length of the variable size long.
`static boolean`
`isLeafPosition(long pos)`
Determines whether specified file position corresponds to a leaf page
`static boolean`
`isPageSaved(long pos)`
Find out if page was saved.
`static IllegalArgumentException`
`newIllegalArgumentException(String message, Object... arguments)`
Create a new IllegalArgumentException.
`static MVStoreException`
`newMVStoreException(int errorCode, String message, Object... arguments)`
Create a new MVStoreException.
`static UnsupportedOperationException`
`newUnsupportedOperationException(String message)`
Create a new UnsupportedOperationException.
`static int`
`parseHexInt(String x)`
Parse an unsigned, hex long.
`static long`
`parseHexLong(String x)`
Parse an unsigned, hex long.
`static HashMap<String,String>`
`parseMap(String s)`
Parse a key-value pair list.
`static void`
`readFully(FileChannel file, long pos, ByteBuffer dst)`
Read from a file channel until the buffer is full.
`static long`
`readHexLong(Map<String,?> map, String key, long defaultValue)`
Read a hex long value from a map.
`static String`
`readString(ByteBuffer buff)`
Read a string.
`static String`
`readString(ByteBuffer buff, int len)`
Read a string.
`static int`
`readVarInt(ByteBuffer buff)`
Read a variable size int.
`static long`
`readVarLong(ByteBuffer buff)`
Read a variable size long.
`static void`
`writeFully(FileChannel file, long pos, ByteBuffer src)`
Write to a file channel.
`static void`
`writeStringData(ByteBuffer buff, String s, int len)`
Write characters from a string (without the length).
`static void`
`writeVarInt(OutputStream out, int x)`
Write a variable size int.
`static void`
`writeVarInt(ByteBuffer buff, int x)`
Write a variable size int.
`static void`
`writeVarLong(OutputStream out, long x)`
Write a variable size long.
`static void`
`writeVarLong(ByteBuffer buff, long x)`
Write a variable size long.

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

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

## Field Details

### ERROR_READING_FAILED

public static final int ERROR_READING_FAILED
An error occurred while reading from the file.

See Also:
  - Constant Field Values

### ERROR_WRITING_FAILED

public static final int ERROR_WRITING_FAILED
An error occurred when trying to write to the file.

See Also:
  - Constant Field Values

### ERROR_INTERNAL

public static final int ERROR_INTERNAL
An internal error occurred. This could be a bug, or a memory corruption (for example caused by out of memory).

See Also:
  - Constant Field Values

### ERROR_CLOSED

public static final int ERROR_CLOSED
The object is already closed.

See Also:
  - Constant Field Values

### ERROR_UNSUPPORTED_FORMAT

public static final int ERROR_UNSUPPORTED_FORMAT
The file format is not supported.

See Also:
  - Constant Field Values

### ERROR_FILE_CORRUPT

public static final int ERROR_FILE_CORRUPT
The file is corrupt or (for encrypted files) the encryption key is wrong.

See Also:
  - Constant Field Values

### ERROR_FILE_LOCKED

public static final int ERROR_FILE_LOCKED
The file is locked.

See Also:
  - Constant Field Values

### ERROR_SERIALIZATION

public static final int ERROR_SERIALIZATION
An error occurred when serializing or de-serializing.

See Also:
  - Constant Field Values

### ERROR_CHUNK_NOT_FOUND

public static final int ERROR_CHUNK_NOT_FOUND
The application was trying to read data from a chunk that is no longer available.

See Also:
  - Constant Field Values

### ERROR_BLOCK_NOT_FOUND

public static final int ERROR_BLOCK_NOT_FOUND
The block in the stream store was not found.

See Also:
  - Constant Field Values

### ERROR_TRANSACTION_CORRUPT

public static final int ERROR_TRANSACTION_CORRUPT
The transaction store is corrupt.

See Also:
  - Constant Field Values

### ERROR_TRANSACTION_LOCKED

public static final int ERROR_TRANSACTION_LOCKED
An entry is still locked by another transaction.

See Also:
  - Constant Field Values

### ERROR_TOO_MANY_OPEN_TRANSACTIONS

public static final int ERROR_TOO_MANY_OPEN_TRANSACTIONS
There are too many open transactions.

See Also:
  - Constant Field Values

### ERROR_TRANSACTION_ILLEGAL_STATE

public static final int ERROR_TRANSACTION_ILLEGAL_STATE
The transaction store is in an illegal state (for example, not yet initialized).

See Also:
  - Constant Field Values

### ERROR_TRANSACTION_TOO_BIG

public static final int ERROR_TRANSACTION_TOO_BIG
The transaction contains too many changes.

See Also:
  - Constant Field Values

### ERROR_TRANSACTIONS_DEADLOCK

public static final int ERROR_TRANSACTIONS_DEADLOCK
Deadlock discovered and one of transactions involved chosen as victim and rolled back.

See Also:
  - Constant Field Values

### ERROR_UNKNOWN_DATA_TYPE

public static final int ERROR_UNKNOWN_DATA_TYPE
The transaction store can not be initialized because data type is not found in type registry.

See Also:
  - Constant Field Values

### PAGE_TYPE_LEAF

public static final int PAGE_TYPE_LEAF
The type for leaf page.

See Also:
  - Constant Field Values

### PAGE_TYPE_NODE

public static final int PAGE_TYPE_NODE
The type for node page.

See Also:
  - Constant Field Values

### PAGE_COMPRESSED

public static final int PAGE_COMPRESSED
The bit mask for compressed pages (compression level fast).

See Also:
  - Constant Field Values

### PAGE_COMPRESSED_HIGH

public static final int PAGE_COMPRESSED_HIGH
The bit mask for compressed pages (compression level high).

See Also:
  - Constant Field Values

### COMPRESSED_VAR_INT_MAX

public static final int COMPRESSED_VAR_INT_MAX
The maximum integer that needs less space when using variable size encoding (only 3 bytes instead of 4).

See Also:
  - Constant Field Values

### COMPRESSED_VAR_LONG_MAX

public static final long COMPRESSED_VAR_LONG_MAX
The maximum long that needs less space when using variable size encoding (only 7 bytes instead of 8).

See Also:
  - Constant Field Values

### PAGE_LARGE

public static final int PAGE_LARGE
The marker size of a very large page.

See Also:
  - Constant Field Values

### LAYOUT_CHUNK

public static final String LAYOUT_CHUNK
The prefix for chunks ("chunk."). This, plus the chunk id (hex encoded) is the key, and the serialized chunk metadata is the value.

See Also:
  - Constant Field Values

### LAYOUT_ROOT

public static final String LAYOUT_ROOT
The prefix for root positions of maps ("root."). This, plus the map id (hex encoded) is the key, and the position (hex encoded) is the value.

See Also:
  - Constant Field Values

### META_NAME

public static final String META_NAME
The prefix for names ("name."). This, plus the name of the map, is the key, and the map id (hex encoded) is the value.

See Also:
  - Constant Field Values

### META_MAP

public static final String META_MAP
The prefix for maps ("map."). This, plus the map id (hex encoded) is the key, and the serialized in the map metadata is the value.

See Also:
  - Constant Field Values

## Constructor Details

### DataUtils

public DataUtils()

## Method Details

### getVarIntLen

public static int getVarIntLen(int x)
Get the length of the variable size int.

Parameters:
  `x` - the value
Returns:
  the length in bytes

### getVarLongLen

public static int getVarLongLen(long x)
Get the length of the variable size long.

Parameters:
  `x` - the value
Returns:
  the length in bytes

### readVarInt

public static int readVarInt(ByteBuffer buff)
Read a variable size int.

Parameters:
  `buff` - the source buffer
Returns:
  the value

### readVarLong

public static long readVarLong(ByteBuffer buff)
Read a variable size long.

Parameters:
  `buff` - the source buffer
Returns:
  the value

### writeVarInt

public static void writeVarInt(OutputStream out, int x) throws IOException
Write a variable size int.

Parameters:
  `out` - the output stream
  `x` - the value
Throws:
  `IOException` - if some data could not be written

### writeVarInt

public static void writeVarInt(ByteBuffer buff, int x)
Write a variable size int.

Parameters:
  `buff` - the source buffer
  `x` - the value

### writeStringData

public static void writeStringData(ByteBuffer buff, String s, int len)
Write characters from a string (without the length).

Parameters:
  `buff` - the target buffer (must be large enough)
  `s` - the string
  `len` - the number of characters

### readString

public static String readString(ByteBuffer buff)
Read a string.

Parameters:
  `buff` - the source buffer
Returns:
  the value

### readString

public static String readString(ByteBuffer buff, int len)
Read a string.

Parameters:
  `buff` - the source buffer
  `len` - the number of characters
Returns:
  the value

### writeVarLong

public static void writeVarLong(ByteBuffer buff, long x)
Write a variable size long.

Parameters:
  `buff` - the target buffer
  `x` - the value

### writeVarLong

public static void writeVarLong(OutputStream out, long x) throws IOException
Write a variable size long.

Parameters:
  `out` - the output stream
  `x` - the value
Throws:
  `IOException` - if some data could not be written

### copyWithGap

public static <T> void copyWithGap(T[] src, T[] dst, int oldSize, int gapIndex)
Copy the elements of an array, with a gap.

Parameters:
  `src` - the source array
  `dst` - the target array
  `oldSize` - the size of the old array
  `gapIndex` - the index of the gap

### copyExcept

public static <T> void copyExcept(T[] src, T[] dst, int oldSize, int removeIndex)
Copy the elements of an array, and remove one element.

Parameters:
  `src` - the source array
  `dst` - the target array
  `oldSize` - the size of the old array
  `removeIndex` - the index of the entry to remove

### readFully

public static void readFully(FileChannel file, long pos, ByteBuffer dst)
Read from a file channel until the buffer is full. The buffer is rewind after reading.

Parameters:
  `file` - the file channel
  `pos` - the absolute position within the file
  `dst` - the byte buffer
Throws:
  `MVStoreException` - if some data could not be read

### writeFully

public static void writeFully(FileChannel file, long pos, ByteBuffer src)
Write to a file channel.

Parameters:
  `file` - the file channel
  `pos` - the absolute position within the file
  `src` - the source buffer

### encodeLength

public static int encodeLength(int len)
Convert the length to a length code 0..31. 31 means more than 1 MB.

Parameters:
  `len` - the length
Returns:
  the length code

### getPageChunkId

public static int getPageChunkId(long pos)
Get the chunk id from the position.

Parameters:
  `pos` - the position
Returns:
  the chunk id

### getPageMapId

public static int getPageMapId(long tocElement)
Get the map id from the chunk's table of content element.

Parameters:
  `tocElement` - packed table of content element
Returns:
  the map id

### getPageMaxLength

public static int getPageMaxLength(long pos)
Get the maximum length for the given page position.

Parameters:
  `pos` - the position
Returns:
  the maximum length

### decodePageLength

public static int decodePageLength(int code)
Get the maximum length for the given code. For the code 31, PAGE_LARGE is returned.

Parameters:
  `code` - encoded page length
Returns:
  the maximum length

### getPageOffset

public static int getPageOffset(long tocElement)
Get the offset from the position.

Parameters:
  `tocElement` - packed table of content element
Returns:
  the offset

### getPageType

public static int getPageType(long pos)
Get the page type from the position.

Parameters:
  `pos` - the position
Returns:
  the page type (PAGE_TYPE_NODE or PAGE_TYPE_LEAF)

### isLeafPosition

public static boolean isLeafPosition(long pos)
Determines whether specified file position corresponds to a leaf page

Parameters:
  `pos` - the position
Returns:
  true if it is a leaf, false otherwise

### isPageSaved

public static boolean isPageSaved(long pos)
Find out if page was saved.

Parameters:
  `pos` - the position
Returns:
  true if page has been saved

### composePagePos

public static long composePagePos(int chunkId, int offset, int length, int type)
Get the position of this page. The following information is encoded in the position: the chunk id, the page sequential number, the maximum length, and the type (node or leaf).

Parameters:
  `chunkId` - the chunk id
  `offset` - the offset
  `length` - the length
  `type` - the page type (1 for node, 0 for leaf)
Returns:
  the position

### composePagePos

public static long composePagePos(int chunkId, long tocElement)
Convert tocElement into pagePos by replacing mapId with chunkId.

Parameters:
  `chunkId` - the chunk id
  `tocElement` - the element
Returns:
  the page position

### composeTocElement

public static long composeTocElement(int mapId, int offset, int length, int type)
Create table of content element. The following information is encoded in it: the map id, the page offset, the maximum length, and the type (node or leaf).

Parameters:
  `mapId` - the chunk id
  `offset` - the offset
  `length` - the length
  `type` - the page type (1 for node, 0 for leaf)
Returns:
  the position

### getCheckValue

public static short getCheckValue(int x)
Calculate a check value for the given integer. A check value is mean to verify the data is consistent with a high probability, but not meant to protect against media failure or deliberate changes.

Parameters:
  `x` - the value
Returns:
  the check value

### appendMap

public static StringBuilder appendMap(StringBuilder buff, HashMap<String,?> map)
Append a map to the string builder, sorted by key.

Parameters:
  `buff` - the target buffer
  `map` - the map
Returns:
  the string builder

### appendMap

public static void appendMap(StringBuilder buff, String key, String value)
Append a key-value pair to the string builder. Keys may not contain a colon. Values that contain a comma or a double quote are enclosed in double quotes, with special characters escaped using a backslash.

Parameters:
  `buff` - the target buffer
  `key` - the key
  `value` - the value

### appendMap

public static void appendMap(StringBuilder buff, String key, long value)
Append a key-value pair to the string builder. Keys may not contain a colon.

Parameters:
  `buff` - the target buffer
  `key` - the key
  `value` - the value

### appendMap

public static void appendMap(StringBuilder buff, String key, int value)
Append a key-value pair to the string builder. Keys may not contain a colon.

Parameters:
  `buff` - the target buffer
  `key` - the key
  `value` - the value

### parseMap

public static HashMap<String,String> parseMap(String s)
Parse a key-value pair list.

Parameters:
  `s` - the list
Returns:
  the map
Throws:
  `MVStoreException` - if parsing failed

### getMapName

public static String getMapName(String s)
Parse a name from key-value pair list.

Parameters:
  `s` - the list
Returns:
  value of name item, or `null`
Throws:
  `MVStoreException` - if parsing failed

### getFromMap

public static String getFromMap(String s, String key)
Parse a specified pair from key-value pair list.

Parameters:
  `s` - the list
  `key` - the name of the key
Returns:
  value of the specified item, or `null`
Throws:
  `MVStoreException` - if parsing failed

### getFletcher32

public static int getFletcher32(byte[] bytes, int offset, int length)
Calculate the Fletcher32 checksum.

Parameters:
  `bytes` - the bytes
  `offset` - initial offset
  `length` - the message length (if odd, 0 is appended)
Returns:
  the checksum

### checkArgument

public static void checkArgument(boolean test, String message, Object... arguments)
Throw an IllegalArgumentException if the argument is invalid.

Parameters:
  `test` - true if the argument is valid
  `message` - the message
  `arguments` - the arguments
Throws:
  `IllegalArgumentException` - if the argument is invalid

### newIllegalArgumentException

public static IllegalArgumentException newIllegalArgumentException(String message, Object... arguments)
Create a new IllegalArgumentException.

Parameters:
  `message` - the message
  `arguments` - the arguments
Returns:
  the exception

### newUnsupportedOperationException

public static UnsupportedOperationException newUnsupportedOperationException(String message)
Create a new UnsupportedOperationException.

Parameters:
  `message` - the message
Returns:
  the exception

### newMVStoreException

public static MVStoreException newMVStoreException(int errorCode, String message, Object... arguments)
Create a new MVStoreException.

Parameters:
  `errorCode` - the error code
  `message` - the message
  `arguments` - the arguments
Returns:
  the exception

### formatMessage

public static String formatMessage(int errorCode, String message, Object... arguments)
Format an error message.

Parameters:
  `errorCode` - the error code
  `message` - the message
  `arguments` - the arguments
Returns:
  the formatted message

### readHexLong

public static long readHexLong(Map<String,?> map, String key, long defaultValue)
Read a hex long value from a map.

Parameters:
  `map` - the map
  `key` - the key
  `defaultValue` - if the value is null
Returns:
  the parsed value
Throws:
  `MVStoreException` - if parsing fails

### parseHexLong

public static long parseHexLong(String x)
Parse an unsigned, hex long.

Parameters:
  `x` - the string
Returns:
  the parsed value
Throws:
  `MVStoreException` - if parsing fails

### parseHexInt

public static int parseHexInt(String x)
Parse an unsigned, hex long.

Parameters:
  `x` - the string
Returns:
  the parsed value
Throws:
  `MVStoreException` - if parsing fails

### convertToIOException

public static IOException convertToIOException(Throwable e)
Convert an exception to an IO exception.

Parameters:
  `e` - the root cause
Returns:
  the IO exception