DataBuffer

パブリックインターフェースDataBuffer
既知の間接サブクラス

特定のタイプのデータのコンテナー。

DataBufferのインスタンスは、ネイティブ メモリ セグメントまたはヒープ メモリ セグメントを、以下をサポートする線形ビューにマップします。

  • 64 ビットのインデックス作成により、2 31バイトを超えるバッファの操作が可能
  • プリミティブだけでなくあらゆるタイプのオブジェクトのストレージ
  • ジェネリック型を使用すると、ボックス型を直接操作することもできます。これには、標準の JDK バッファーのように明示的なバッファー型を必要としません。
特に非プリミティブ型または大きなバッファを扱う場合、 DataBufferによって管理されるメモリが線形であるという保証はないことに注意することが重要です。

パブリックメソッド

抽象 <R> R
accept ( DataStorageVisitor <R> 訪問者)
このバッファのバッキング ストレージにアクセスします。
抽象データバッファ<T>
copyTo ( DataBuffer <T> dst、ロングサイズ)
ソース配列内のオブジェクトの参照をこのバッファに書き込みます。
抽象ブール値
等しい(オブジェクトオブジェクト)
データバッファ間の等価性をチェックします。
抽象的な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このバッファが読み取り専用の場合