org.h2.mvstore

## Class DataUtils

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

    public final class DataUtils
    extends java.lang.Object

Utility methods

### Field Summary

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

### Constructor Summary

Constructors
Constructor and Description
`DataUtils()`

### Method Summary

All Methods Static Methods Concrete Methods
`static java.lang.StringBuilder` `appendMap(java.lang.StringBuilder buff, java.util.HashMap<java.lang.String,?> map)` Append a map to the string builder, sorted by key.
`static void` `appendMap(java.lang.StringBuilder buff, java.lang.String key, int value)` Append a key-value pair to the string builder.
`static void` `appendMap(java.lang.StringBuilder buff, java.lang.String key, long value)` Append a key-value pair to the string builder.
`static void` `appendMap(java.lang.StringBuilder buff, java.lang.String key, java.lang.String value)` Append a key-value pair to the string builder.
`static void` `checkArgument(boolean test, java.lang.String message, java.lang.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 java.io.IOException` `convertToIOException(java.lang.Throwable e)` Convert an exception to an IO exception.
`static void` `copyExcept(java.lang.Object src, java.lang.Object dst, int oldSize, int removeIndex)` Copy the elements of an array, and remove one element.
`static void` `copyWithGap(java.lang.Object src, java.lang.Object 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 java.lang.String` `formatMessage(int errorCode, java.lang.String message, java.lang.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 java.lang.String` `getFromMap(java.lang.String s, java.lang.String key)` Parse a specified pair from key-value pair list.
`static java.lang.String` `getMapName(java.lang.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 java.lang.IllegalArgumentException` `newIllegalArgumentException(java.lang.String message, java.lang.Object... arguments)` Create a new IllegalArgumentException.
`static MVStoreException` `newMVStoreException(int errorCode, java.lang.String message, java.lang.Object... arguments)` Create a new MVStoreException.
`static java.lang.UnsupportedOperationException` `newUnsupportedOperationException(java.lang.String message)` Create a new UnsupportedOperationException.
`static int` `parseHexInt(java.lang.String x)` Parse an unsigned, hex long.
`static long` `parseHexLong(java.lang.String x)` Parse an unsigned, hex long.
`static java.util.HashMap<java.lang.String,java.lang.String>` `parseMap(java.lang.String s)` Parse a key-value pair list.
`static void` `readFully(java.nio.channels.FileChannel file, long pos, java.nio.ByteBuffer dst)` Read from a file channel until the buffer is full.
`static long` `readHexLong(java.util.Map<java.lang.String,?> map, java.lang.String key, long defaultValue)` Read a hex long value from a map.
`static java.lang.String` `readString(java.nio.ByteBuffer buff)` Read a string.
`static java.lang.String` `readString(java.nio.ByteBuffer buff, int len)` Read a string.
`static int` `readVarInt(java.nio.ByteBuffer buff)` Read a variable size int.
`static long` `readVarLong(java.nio.ByteBuffer buff)` Read a variable size long.
`static void` `writeFully(java.nio.channels.FileChannel file, long pos, java.nio.ByteBuffer src)` Write to a file channel.
`static void` `writeStringData(java.nio.ByteBuffer buff, java.lang.String s, int len)` Write characters from a string (without the length).
`static void` `writeVarInt(java.nio.ByteBuffer buff, int x)` Write a variable size int.
`static void` `writeVarInt(java.io.OutputStream out, int x)` Write a variable size int.
`static void` `writeVarLong(java.nio.ByteBuffer buff, long x)` Write a variable size long.
`static void` `writeVarLong(java.io.OutputStream out, 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 Detail

#### 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

#### META_CHUNK

    public static final java.lang.String META_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

#### META_ROOT

    public static final java.lang.String META_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 java.lang.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 java.lang.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 Detail

#### DataUtils

    public DataUtils()

### Method Detail

#### 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(java.nio.ByteBuffer buff)

Read a variable size int.

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

#### readVarLong

    public static long readVarLong(java.nio.ByteBuffer buff)

Read a variable size long.

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

#### writeVarInt

    public static void writeVarInt(java.io.OutputStream out,
                                   int x)
                            throws java.io.IOException

Write a variable size int.

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

#### writeVarInt

    public static void writeVarInt(java.nio.ByteBuffer buff,
                                   int x)

Write a variable size int.

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

#### writeStringData

    public static void writeStringData(java.nio.ByteBuffer buff,
                                       java.lang.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 java.lang.String readString(java.nio.ByteBuffer buff)

Read a string.

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

#### readString

    public static java.lang.String readString(java.nio.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(java.nio.ByteBuffer buff,
                                    long x)

Write a variable size long.

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

#### writeVarLong

    public static void writeVarLong(java.io.OutputStream out,
                                    long x)
                             throws java.io.IOException

Write a variable size long.

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

#### copyWithGap

    public static void copyWithGap(java.lang.Object src,
                                   java.lang.Object 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 void copyExcept(java.lang.Object src,
                                  java.lang.Object 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(java.nio.channels.FileChannel file,
                                 long pos,
                                 java.nio.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(java.nio.channels.FileChannel file,
                                  long pos,
                                  java.nio.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 java.lang.StringBuilder appendMap(java.lang.StringBuilder buff,
                                                    java.util.HashMap<java.lang.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(java.lang.StringBuilder buff,
                                 java.lang.String key,
                                 java.lang.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(java.lang.StringBuilder buff,
                                 java.lang.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(java.lang.StringBuilder buff,
                                 java.lang.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 java.util.HashMap<java.lang.String,java.lang.String> parseMap(java.lang.String s)

Parse a key-value pair list.

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

#### getMapName

    public static java.lang.String getMapName(java.lang.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 java.lang.String getFromMap(java.lang.String s,
                                              java.lang.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,
                                     java.lang.String message,
                                     java.lang.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:
  `java.lang.IllegalArgumentException` - if the argument is invalid

#### newIllegalArgumentException

    public static java.lang.IllegalArgumentException newIllegalArgumentException(java.lang.String message,
                                                                                 java.lang.Object... arguments)

Create a new IllegalArgumentException.

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

#### newUnsupportedOperationException

    public static java.lang.UnsupportedOperationException newUnsupportedOperationException(java.lang.String message)

Create a new UnsupportedOperationException.

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

#### newMVStoreException

    public static MVStoreException newMVStoreException(int errorCode,
                                                       java.lang.String message,
                                                       java.lang.Object... arguments)

Create a new MVStoreException.

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

#### formatMessage

    public static java.lang.String formatMessage(int errorCode,
                                                 java.lang.String message,
                                                 java.lang.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(java.util.Map<java.lang.String,?> map,
                                   java.lang.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(java.lang.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(java.lang.String x)

Parse an unsigned, hex long.

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

#### convertToIOException

    public static java.io.IOException convertToIOException(java.lang.Throwable e)

Convert an exception to an IO exception.

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