DataBuffer

Interface publique DataBuffer
Sous-classes indirectes connues

Un conteneur de données d'un type spécifique.

Les instances de DataBuffer mappent les segments de mémoire native ou tas vers une vue linéaire qui prend en charge :

  • Indexation 64 bits, permettant de travailler avec un tampon supérieur à 2 31 octets
  • Stockage d'objets de tous types et pas seulement de primitives
  • Les types génériques permettent également de travailler directement avec des types en boîte, ce qui ne nécessite pas de types de tampon explicites comme avec les tampons standard du JDK.
Il est important de noter qu'il n'y a aucune garantie que la mémoire gérée par un DataBuffer soit linéaire, notamment lorsqu'il s'agit de types non primitifs ou de grands tampons.

Méthodes publiques

résumé <R> R
accepter (visiteur DataStorageVisitor <R>)
Visite le stockage de sauvegarde de ce tampon.
abstrait DataBuffer <T>
copyTo ( DataBuffer <T> dst, taille longue)
Écrivez les références des objets du tableau source dans ce tampon.
booléen abstrait
est égal (Obj objet)
Vérifie l'égalité entre les tampons de données.
résumé T
getObject (index long)
Lit la valeur à l'index donné.
booléen abstrait
estReadOnly ()
Indique si ce tampon est soutenu ou non par un tableau accessible.
abstrait DataBuffer <T>
étroit (taille longue)
Crée un nouveau tampon dont le contenu est une sous-séquence partagée du contenu de ce tampon, dont la taille est définie sur la valeur donnée.
abstrait DataBuffer <T>
décalage (index long)
Crée un nouveau tampon dont le contenu est une sous-séquence partagée du contenu de ce tampon, en commençant à l'index donné.
abstrait DataBuffer <T>
lire (T[] heure d'été)
Lisez les références des objets de ce tampon dans le tableau de destination.
abstrait DataBuffer <T>
lire (T[] dst, décalage int, longueur int)
Lisez les références des objets de ce tampon dans le tableau de destination.
abstrait DataBuffer <T>
setObject (valeur T, index long)
Écrit la valeur donnée dans ce tampon à l'index donné.
abstrait long
taille ()
Taille du buffer, en éléments.
abstrait DataBuffer <T>
tranche (index long, taille longue)
Crée un nouveau tampon dont le contenu est une sous-séquence partagée du contenu de ce tampon, commençant à l'index donné et de la taille donnée.
abstrait DataBufferWindow <? étend DataBuffer <T>>
fenêtre (taille longue)
Crée un DataBufferWindow qui fournit une vue partielle de ce tampon.
abstrait DataBuffer <T>
écrire (T[] src)
Écrivez les références des objets du tableau source dans ce tampon.
abstrait DataBuffer <T>
écrire (T[] src, int offset, int length)
Méthode de put en bloc, utilisant des tableaux int.

Méthodes publiques

public abstract R accepter ( DataStorageVisitor <R> visiteur)

Visite le stockage de sauvegarde de ce tampon.

L'implémentation du tampon est chargée de renvoyer une référence au stockage réel des données au visiteur fourni. Le visiteur n'a pas à gérer tous les types possibles de stockage de données et peut remplacer uniquement les méthodes de stockage qui l'intéressent réellement. Pour tout autre type de stockage, cet appel reviendra à fallback() afin que le visiteur puisse exécuter une routine générique si nécessaire.

Paramètres
visiteur visite le stockage des données de ce tampon
Retours
  • la même valeur renvoyée par le visiteur

public abstract DataBuffer <T> copyTo ( DataBuffer <T> dst, taille longue)

Écrivez les références des objets du tableau source dans ce tampon.

S'il y a plus de valeurs à copier que la taille du tampon de destination, c'est-à-dire size > dst.size() , alors aucune valeur n'est transférée et une BufferOverflowException est levée. D'un autre côté, s'il y a plus de valeurs à copier que la taille du tampon source, c'est-à-dire > src.size() , alors une BufferUnderfloatException est levée.

Sinon, cette méthode copie les valeurs n = size de ce tampon dans le tampon de destination.

Paramètres
heure d'été le tampon de destination dans lequel les valeurs sont copiées ; ne doit pas être ce tampon
taille nombre de valeurs à copier dans le tampon de destination
Retours
  • ce tampon
Jetés
IllegalArgumentException si le tampon de destination est ce tampon
ReadOnlyBufferException si le tampon de destination est en lecture seule
BufferOverflowException s'il n'y a pas assez d'espace dans le tampon de destination
BufferUnderflowException s'il n'y a pas assez de valeurs dans le tampon source

public abstrait booléen égal (Objet obj)

Vérifie l'égalité entre les tampons de données.

Un tampon de données est égal à un autre objet si cet objet est un autre DataBuffer de même taille, type et que les éléments sont égaux et dans le même ordre. Par exemple:

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
 

Notez que le calcul nécessaire pour vérifier l'égalité entre deux tampons peut être coûteux dans certains cas et par conséquent, il est recommandé de ne pas utiliser cette méthode dans un chemin critique où les performances comptent.

Paramètres
obj objet pour comparer ce tampon avec
Retours
  • vrai si ce tampon est égal à l'objet fourni

public abstrait T getObject (index long)

Lit la valeur à l'index donné. Important : L'utilisation de cette méthode doit être limitée aux tampons de types non primitifs ou lorsque le type de données n'est pas connu de manière déterministe par l'appelant. Dans tous les autres cas, préférez l'utilisation de sa variante primitive qui améliorera considérablement les performances (par exemple IntDataBuffer.getInt(idx)

Paramètres
indice l'index à partir duquel le float sera lu
Retours
  • la valeur à l'indice donné
Jetés
IndexOutOfBoundsException si l'index est négatif ou non inférieur à la taille du tampon

public abstrait booléen isReadOnly ()

Indique si ce tampon est soutenu ou non par un tableau accessible.

Retours
  • vrai si, et seulement si, ce tampon est en lecture seule

public abstract DataBuffer <T> étroit (taille longue)

Crée un nouveau tampon dont le contenu est une sous-séquence partagée du contenu de ce tampon, dont la taille est définie sur la valeur donnée.

La nouvelle taille ne doit pas être supérieure à cette taille de tampon. Les modifications apportées au contenu de ce tampon seront visibles dans le nouveau tampon et vice versa. Le nouveau tampon sera en lecture seule si, et seulement si, ce tampon est en lecture seule.

Cet appel est équivalent à slice(0, size)

Paramètres
taille taille de ce nouveau tampon
Retours
  • le nouveau tampon
Jetés
IllegalArgumentException si les valeurs d'index et/ou de taille ne passent pas les contrôles de validation

public abstract DataBuffer <T> offset (index long)

Crée un nouveau tampon dont le contenu est une sous-séquence partagée du contenu de ce tampon, en commençant à l'index donné.

L'index ne doit pas être supérieur à cette taille de tampon. Les modifications apportées au contenu de ce tampon seront visibles dans le nouveau tampon et vice versa. Le nouveau tampon sera en lecture seule si, et seulement si, ce tampon est en lecture seule.

Cet appel est équivalent à slice(index, size() - index)

Paramètres
indice l'index de la première valeur du nouveau tampon créé, ne doit pas être supérieur à size()
Retours
  • le nouveau tampon
Jetés
IllegalArgumentException si l'index ne passe pas les contrôles de validation

public abstrait DataBuffer <T> lecture (T[] dst)

Lisez les références des objets de ce tampon dans le tableau de destination.

Cette méthode transfère les valeurs de ce tampon vers le tableau de destination donné. S'il y a moins de valeurs dans le tampon que nécessaire pour satisfaire la demande, c'est-à-dire si dst.length > size() , alors aucune valeur n'est transférée et une BufferUnderflowException est levée.

Sinon, cette méthode copie les valeurs n = dst.length de ce tampon dans le tableau donné.

Paramètres
heure d'été le tableau dans lequel les valeurs doivent être écrites
Retours
  • ce tampon
Jetés
BufferUnderflowException s'il n'y a pas assez de valeurs à copier depuis ce tampon

public abstract DataBuffer <T> lecture (T[] dst, int offset, int length)

Lisez les références des objets de ce tampon dans le tableau de destination.

Cette méthode transfère les valeurs de ce tampon vers le tableau de destination donné. S'il y a moins de valeurs dans le tampon que nécessaire pour satisfaire la demande, c'est-à-dire si length > size() , alors aucune valeur n'est transférée et une BufferUnderflowException est levée.

Sinon, cette méthode copie les valeurs n = length de ce tampon dans le tableau donné en commençant au décalage donné.

Paramètres
heure d'été le tableau dans lequel les valeurs doivent être écrites
compenser le décalage dans le tableau de la première valeur à écrire ; doit être non négatif et ne pas dépasser dst.length
longueur le nombre maximum de valeurs à écrire dans le tableau donné ; doit être non négatif et ne pas dépasser dst.length - offset
Retours
  • ce tampon
Jetés
BufferUnderflowException s'il reste moins de valeurs de longueur dans ce tampon
IndexOutOfBoundsException si les conditions préalables sur les paramètres offset et longueur ne sont pas remplies

public abstract DataBuffer <T> setObject (valeur T, index long)

Écrit la valeur donnée dans ce tampon à l'index donné. Important : L'utilisation de cette méthode doit être limitée aux tampons de types non primitifs ou lorsque le type de données n'est pas connu de manière déterministe par l'appelant. Dans tous les autres cas, préférez l'utilisation de sa variante primitive qui améliorera considérablement les performances (par exemple IntDataBuffer.setInt(idx)

Paramètres
valeur la valeur à écrire
indice l'index auquel la valeur sera écrite
Retours
  • ce tampon
Jetés
IndexOutOfBoundsException si l'index est négatif ou non inférieur à la taille du tampon
ReadOnlyBufferException si ce tampon est en lecture seule

résumé public taille longue ()

Taille du buffer, en éléments.

Par exemple, dans le cas d'un tampon d'octets, cette valeur est égale au nombre d'octets que ce tampon peut contenir. Pour un tampon entier, il est égal au nombre d'entiers, donc la taille en octets de ce tampon est size() * Integer.BYTES .

Retours
  • la taille du tampon

tranche publique abstraite DataBuffer <T> (index long, taille longue)

Crée un nouveau tampon dont le contenu est une sous-séquence partagée du contenu de ce tampon, commençant à l'index donné et de la taille donnée.

L'index plus la nouvelle taille ne doivent pas être supérieurs à cette taille de tampon. Les modifications apportées au contenu de ce tampon seront visibles dans le nouveau tampon et vice versa. Le nouveau tampon sera en lecture seule si, et seulement si, ce tampon est en lecture seule.

Paramètres
indice index de la première valeur du nouveau buffer créé
taille la taille de ce nouveau tampon ne doit pas être supérieure à size()
Retours
  • le nouveau tampon
Jetés
IllegalArgumentException si la valeur de taille ne passe pas les contrôles de validation

public abstrait DataBufferWindow <? étend la fenêtre DataBuffer <T>> (taille longue)

Crée un DataBufferWindow qui fournit une vue partielle de ce tampon.

La fenêtre créée a une taille fixe et peut "slide" le long de ce tampon pour fournir différentes vues des données sans allouer une nouvelle instance de tampon, comme le fait offset(long) . Cela améliore les performances globales lorsque cette opération est répétée fréquemment. Par exemple:

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;
     
 }
 }

L'objet renvoyé est avec état et n'est pas thread-safe.

Paramètres
taille taille de la fenêtre
Retours
  • une nouvelle fenêtre qui commence à l'index 0 de ce buffer
Jetés
Exception d'opération non prise en charge si ce type de tampon ne prend pas en charge les fenêtres tampon

public abstrait DataBuffer <T> écriture (T[] src)

Écrivez les références des objets du tableau source dans ce tampon.

Cette méthode transfère les valeurs du tableau source donné dans ce tampon. S'il y a plus de valeurs dans le tableau source que dans ce tampon, c'est-à-dire si src.length > size() , alors aucune valeur n'est transférée et une BufferOverflowException est levée.

Sinon, cette méthode copie les valeurs n = src.length du tableau donné.

Paramètres
src le tableau source à partir duquel les valeurs doivent être lues
Retours
  • ce tampon
Jetés
BufferOverflowException s'il n'y a pas suffisamment d'espace dans ce tampon pour les valeurs du tableau source
ReadOnlyBufferException si ce tampon est en lecture seule

public abstract DataBuffer <T> écriture (T[] src, int offset, int length)

Méthode de put en bloc, utilisant des tableaux int.

Cette méthode transfère les valeurs du tableau source donné dans ce tampon. S'il y a plus de valeurs dans le tableau source que dans ce tampon, c'est-à-dire si length > size() , alors aucune valeur n'est transférée et une BufferOverflowException est levée.

Sinon, cette méthode copie les valeurs n = length du tableau donné dans ce tampon, en commençant au décalage donné.

Paramètres
src le tableau source à partir duquel les valeurs doivent être lues
compenser le décalage dans le tableau de la première valeur à lire ; doit être non négatif et ne pas dépasser src.length
longueur le nombre de valeurs à lire dans le tableau donné ; doit être non négatif et ne pas dépasser src.length - offset
Retours
  • ce tampon
Jetés
BufferOverflowException s'il n'y a pas suffisamment d'espace dans ce tampon pour les valeurs du tableau source
IndexOutOfBoundsException si les conditions préalables sur les paramètres offset et longueur ne sont pas remplies
ReadOnlyBufferException si ce tampon est en lecture seule