La méthode slice() crée un nouvel objet Buffer à partir d'un tampon existant. Ce nouvel objet contient une partie des éléments du tampon d'origine. Cette partie est délimitée par la position et la limite de l'objet Buffer.
CharBuffer cb = CharBuffer.allocate(255); //... cb.position(32); cb.limit(64); CharBuffer ss_cb = cb.slice(); //ss_cb contient 32 éléments de cb //de la position 32 jusqu'à la limite 64
Le sous-tampon et le tampon d'origine partagent leurs éléments communs, c'est-à-dire que toutes les modifications apportées dans les éléments partagés refléteront les mêmes valeurs dans l'un ou l'autre des objets précités.
//Modification des 32 valeurs de ss_cb
for(int i = 0; i < 32; i++){
ss_cb.put(i, '_');
}
//Affichage de la représentation textuelle de cb
System.out.println(cb.toString());
//0 - 32 -------- 64 - 255
//... ^ _________ ^ ...
Exemple [voir]
package nio;
import java.nio.ByteBuffer;
public class SousTampon {
static public void main(String args[]) throws Exception {
String contenu = "Un contenu quelconque...";
System.out.println("Tampon d'origine : " + contenu);
ByteBuffer tampon = ByteBuffer.allocate(contenu.length());
tampon.put(contenu.getBytes());
tampon.position(3);
tampon.limit(10);
ByteBuffer decoupe = tampon.slice();
System.out.print("Sous-tampon : ");
for (int i = 0; i < decoupe.capacity(); i++) {
byte o = decoupe.get(i);
System.out.print((char)o);
}
System.out.println("\nModification du sous-tampon...");
decoupe.position(0);
decoupe.put("rapport".getBytes());
tampon.position(0);
tampon.limit(tampon.capacity());
System.out.print("Tampon d'origine : ");
while (tampon.remaining() > 0) {
System.out.print((char)tampon.get());
}
}
} |