既知の間接サブクラス |
特定のタイプのデータのコンテナー。
DataBuffer
のインスタンスは、ネイティブ メモリ セグメントまたはヒープ メモリ セグメントを、以下をサポートする線形ビューにマップします。
- 64 ビットのインデックス作成により、2 31バイトを超えるバッファの操作が可能
- プリミティブだけでなくあらゆるタイプのオブジェクトのストレージ
- ジェネリック型を使用すると、ボックス型を直接操作することもできます。これには、標準の JDK バッファーのように明示的なバッファー型を必要としません。
DataBuffer
によって管理されるメモリが線形であるという保証はないことに注意することが重要です。 パブリックメソッド
抽象 <R> R | |
抽象データバッファ<T> | |
抽象ブール値 | 等しい(オブジェクトオブジェクト) データバッファ間の等価性をチェックします。 |
抽象的なT | getObject (ロングインデックス) 指定されたインデックスの値を読み取ります。 |
抽象ブール値 | isReadOnly () このバッファがアクセス可能な配列によってサポートされているかどうかを示します。 |
抽象データバッファ<T> | ナロー(ロングサイズ) 新しいバッファを作成します。その内容は、このバッファの内容の共有サブシーケンスであり、そのサイズは指定された値に設定されます。 |
抽象データバッファ<T> | オフセット(ロングインデックス) 指定されたインデックスから開始して、このバッファのコンテンツの共有サブシーケンスをコンテンツとする新しいバッファを作成します。 |
抽象データバッファ<T> | 読み取り(T[] dst) このバッファ内のオブジェクトの参照を宛先配列に読み取ります。 |
抽象データバッファ<T> | 読み取り(T[] dst、int オフセット、int 長) このバッファ内のオブジェクトの参照を宛先配列に読み取ります。 |
抽象データバッファ<T> | setObject (T 値、ロングインデックス) 指定された値をこのバッファの指定されたインデックスに書き込みます。 |
抽象的な長い | サイズ() バッファーのサイズ (要素単位)。 |
抽象データバッファ<T> | スライス(ロングインデックス、ロングサイズ) 指定されたインデックスと指定されたサイズで開始され、その内容がこのバッファの内容の共有サブシーケンスである新しいバッファを作成します。 |
抽象DataBufferWindow <? DataBuffer <T>> を拡張します | 窓(ロングサイズ) このバッファの部分的なビューを提供する DataBufferWindow を作成します。 |
抽象データバッファ<T> | 書き込み(T[] ソース) ソース配列内のオブジェクトの参照をこのバッファに書き込みます。 |
抽象データバッファ<T> | write (T[] src、int オフセット、int 長) int 配列を使用した Bulk putメソッド。 |
パブリックメソッド
public abstract R accept ( DataStorageVisitor <R> ビジター)
このバッファのバッキング ストレージにアクセスします。
バッファ実装は、実際のデータ ストレージへの参照を提供された訪問者に返す責任があります。訪問者は、考えられるすべてのタイプのデータ ストレージを処理する必要はなく、実際に関心のあるストレージのメソッドのみをオーバーライドできます。他のタイプのストレージの場合、この呼び出しはfallback()
にフォールバックするため、訪問者は次の場合に汎用ルーチンを実行できます。必要です。
パラメータ
ビジター | このバッファのデータストレージにアクセスします |
---|
返品
- 訪問者によって返されたのと同じ値
public abstract DataBuffer <T> copyTo ( DataBuffer <T> dst、ロングサイズ)
ソース配列内のオブジェクトの参照をこのバッファに書き込みます。
コピーする値が宛先バッファ サイズよりも多い場合、つまりsize > dst.size()
場合、値は転送されず、BufferOverflowException がスローされます。一方、ソース バッファ サイズより多くの値をコピーする場合、つまり> src.size()
の場合、 BufferUnderfloatException がスローされます。
それ以外の場合、このメソッドはn = size
値をこのバッファから宛先バッファにコピーします。
パラメータ
夏時間 | 値がコピーされる宛先バッファ。このバッファであってはなりません |
---|---|
サイズ | 宛先バッファにコピーする値の数 |
返品
- このバッファ
投げる
IllegalArgumentException | 宛先バッファがこのバッファの場合 |
---|---|
ReadOnlyBufferException | 宛先バッファが読み取り専用の場合 |
バッファオーバーフロー例外 | 宛先バッファに十分なスペースがない場合 |
バッファアンダーフロー例外 | ソースバッファに十分な値がない場合 |
public abstract boolean等しい(オブジェクト obj)
データバッファ間の等価性をチェックします。
このオブジェクトが同じサイズ、タイプの別のDataBuffer
であり、要素が等しく、同じ順序である場合、データ バッファは別のオブジェクトと等しいです。例えば:
IntDataBuffer buffer = DataBuffers.of(1, 2, 3);
assertEquals(buffer, DataBuffers.of(1, 2, 3)); // true
assertEquals(buffer, DataBuffers.ofObjects(1, 2, 3)); // true, as Integers are equal to ints
assertNotEquals(buffer, DataBuffers.of(1, 2, 3, 0)); // false, different sizes
assertNotEquals(buffer, DataBuffers.of(1, 3, 2)); // false, different order
assertNotEquals(buffer, DataBuffers.of(1L, 2L, 3L)); // false, different types
2 つのバッファ間の同等性を検証するために必要な計算は場合によってはコストが高くなる可能性があるため、パフォーマンスが重要なクリティカル パスではこの方法を使用しないことをお勧めします。
パラメータ
オブジェクト | このバッファを比較するオブジェクト |
---|
返品
- このバッファが提供されたオブジェクトと等しい場合は true
public abstract T getObject (ロングインデックス)
指定されたインデックスの値を読み取ります。重要:このメソッドの使用は、非プリミティブ型のバッファー、または呼び出し元がデータ型を確定的に認識していない場合に限定する必要があります。それ以外の場合は、パフォーマンスを大幅に向上させるプリミティブ バリアントの使用を優先します (例: IntDataBuffer.getInt(idx)
パラメータ
索引 | float が読み取られるインデックス |
---|
返品
- 指定されたインデックスの値
投げる
IndexOutOfBoundsException | インデックスが負の場合、またはバッファ サイズ以上の場合 |
---|
パブリック抽象ブール値isReadOnly ()
このバッファがアクセス可能な配列によってサポートされているかどうかを示します。
返品
- このバッファが読み取り専用の場合にのみ true
public abstract DataBuffer <T>ナロー(ロングサイズ)
新しいバッファを作成します。その内容は、このバッファの内容の共有サブシーケンスであり、そのサイズは指定された値に設定されます。
新しいサイズは、このバッファ サイズを超えてはなりません。このバッファの内容に対する変更は新しいバッファに反映され、その逆も同様です。このバッファが読み取り専用である場合に限り、新しいバッファは読み取り専用になります。
この呼び出しはslice(0, size)
と同等です。
パラメータ
サイズ | この新しいバッファのサイズ |
---|
返品
- 新しいバッファ
投げる
IllegalArgumentException | インデックス値やサイズ値が検証チェックに合格しない場合 |
---|
public abstract DataBuffer <T>オフセット(ロングインデックス)
指定されたインデックスから開始して、このバッファのコンテンツの共有サブシーケンスをコンテンツとする新しいバッファを作成します。
インデックスはこのバッファ サイズを超えてはなりません。このバッファの内容に対する変更は新しいバッファに反映され、その逆も同様です。このバッファが読み取り専用である場合に限り、新しいバッファは読み取り専用になります。
この呼び出しはslice(index, size() - index)
と同等です。
パラメータ
索引 | 作成される新しいバッファの最初の値のインデックスは、 size() より大きくてはなりません |
---|
返品
- 新しいバッファ
投げる
IllegalArgumentException | インデックスが検証チェックに合格しない場合 |
---|
public abstract DataBuffer <T>読み取り(T[] dst)
このバッファ内のオブジェクトの参照を宛先配列に読み取ります。
このメソッドは、このバッファから指定された宛先配列に値を転送します。リクエストを満たすために必要な値よりもバッファ内の値が少ない場合、つまりdst.length > size()
の場合、値は転送されず、 BufferUnderflowException がスローされます。
それ以外の場合、このメソッドはn = dst.length
値をこのバッファから指定された配列にコピーします。
パラメータ
夏時間 | 値が書き込まれる配列 |
---|
返品
- このバッファ
投げる
バッファアンダーフロー例外 | このバッファからコピーするのに十分な値がない場合 |
---|
public abstract DataBuffer <T>読み取り(T[] dst、int オフセット、int 長)
このバッファ内のオブジェクトの参照を宛先配列に読み取ります。
このメソッドは、このバッファから指定された宛先配列に値を転送します。リクエストを満たすために必要な値よりもバッファ内の値が少ない場合、つまりlength > size()
の場合、値は転送されず、 BufferUnderflowException がスローされます。
それ以外の場合、このメソッドはn = length
値をこのバッファから指定された配列にコピーし、指定されたオフセットから開始します。
パラメータ
夏時間 | 値が書き込まれる配列 |
---|---|
オフセット | 書き込まれる最初の値の配列内のオフセット。負ではなく、 dst.length 以下である必要があります。 |
長さ | 指定された配列に書き込まれる値の最大数。負ではなく、 dst.length - offset より大きくてはなりません |
返品
- このバッファ
投げる
バッファアンダーフロー例外 | このバッファーに残っている値が長さよりも少ない場合 |
---|---|
IndexOutOfBoundsException | オフセットパラメータと長さパラメータの前提条件が満たされない場合 |
public abstract DataBuffer <T> setObject (T 値、長いインデックス)
指定された値をこのバッファの指定されたインデックスに書き込みます。重要:このメソッドの使用は、非プリミティブ型のバッファー、または呼び出し元がデータ型を確定的に認識していない場合に限定する必要があります。それ以外の場合は、パフォーマンスを大幅に向上させるプリミティブ バリアントの使用を優先してください (例: IntDataBuffer.setInt(idx)
パラメータ
価値 | 書き込まれる値 |
---|---|
索引 | 値が書き込まれるインデックス |
返品
- このバッファ
投げる
IndexOutOfBoundsException | インデックスが負の場合、またはバッファ サイズ以上の場合 |
---|---|
ReadOnlyBufferException | このバッファが読み取り専用の場合 |
公開抽象ロングサイズ( )
バッファーのサイズ (要素単位)。
たとえば、バイト バッファの場合、この値はこのバッファが保持できるバイト数と等しくなります。整数バッファの場合、これは整数の数に等しいため、このバッファのバイト単位のサイズはsize() * Integer.BYTES
となります。
返品
- バッファサイズ
public abstract DataBuffer <T>スライス(長いインデックス、長いサイズ)
指定されたインデックスと指定されたサイズで開始され、その内容がこのバッファの内容の共有サブシーケンスである新しいバッファを作成します。
インデックスに新しいサイズを加えた値は、このバッファ サイズを超えてはなりません。このバッファの内容に対する変更は新しいバッファに反映され、その逆も同様です。このバッファが読み取り専用である場合に限り、新しいバッファは読み取り専用になります。
パラメータ
索引 | 作成された新しいバッファの最初の値のインデックス |
---|---|
サイズ | この新しいバッファのサイズは、 size() より大きくてはなりません |
返品
- 新しいバッファ
投げる
IllegalArgumentException | サイズ値が検証チェックに合格しない場合 |
---|
パブリック抽象DataBufferWindow <? DataBuffer <T>>ウィンドウを拡張します(長いサイズ)
このバッファの部分的なビューを提供するDataBufferWindow
を作成します。
作成されたウィンドウは固定サイズで、 offset(long)
のように新しいバッファ インスタンスを割り当てることなく、このバッファに沿って"slide"
てデータのさまざまなビューを提供できます。これにより、この操作が頻繁に繰り返される場合の全体的なパフォーマンスが向上します。例えば:
IntDataBuffer bufferA = DataBuffers.ofInts(1024);
// ... init buffer data
IntDataBuffer bufferB = DataBuffers.ofInts(1, 2, 3, 4);
// Return the index of the first occurrence of bufferB in bufferA using a sliding window
DataBufferWindow<IntDataBuffer> windowA = bufferA.window(4);
for (int i = 0; i < bufferA.size() - bufferB.size(); ++i) {
if (windowA.slideTo(i).buffer().equals(bufferB)) {
return i;
}
}
返されたオブジェクトはステートフルであり、スレッドセーフではありません。
パラメータ
サイズ | 窓のサイズ |
---|
返品
- このバッファのインデックス 0 から始まる新しいウィンドウ
投げる
UnsupportedOperationException | このタイプのバッファがバッファ ウィンドウをサポートしていない場合 |
---|
public abstract DataBuffer <T> write (T[] src)
ソース配列内のオブジェクトの参照をこのバッファに書き込みます。
このメソッドは、指定されたソース配列の値をこのバッファーに転送します。ソース配列にこのバッファよりも多くの値がある場合、つまりsrc.length > size()
の場合、値は転送されず、 BufferOverflowException がスローされます。
それ以外の場合、このメソッドは指定された配列からn = src.length
値をコピーします。
パラメータ
送信元 | 値が読み取られるソース配列 |
---|
返品
- このバッファ
投げる
バッファオーバーフロー例外 | このバッファーにソース配列の値を格納するための十分なスペースがない場合 |
---|---|
ReadOnlyBufferException | このバッファが読み取り専用の場合 |
public abstract DataBuffer <T> write (T[] src, int offset, int length)
int 配列を使用した Bulk putメソッド。
このメソッドは、指定されたソース配列の値をこのバッファーに転送します。ソース配列にこのバッファよりも多くの値がある場合、つまりlength > size()
の場合、値は転送されず、 BufferOverflowException がスローされます。
それ以外の場合、このメソッドは、指定された配列から指定されたオフセットから開始して、 n = length
値をこのバッファーにコピーします。
パラメータ
送信元 | 値が読み取られるソース配列 |
---|---|
オフセット | 読み取られる最初の値の配列内のオフセット。負ではなく、 src.length 以下である必要があります。 |
長さ | 指定された配列から読み取られる値の数。負ではなく、 src.length - offset を超えてはいけません |
返品
- このバッファ
投げる
バッファオーバーフロー例外 | このバッファーにソース配列の値を格納するための十分なスペースがない場合 |
---|---|
IndexOutOfBoundsException | オフセットパラメータと長さパラメータの前提条件が満たされない場合 |
ReadOnlyBufferException | このバッファが読み取り専用の場合 |