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.
Exemple [voir]//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 //... ^ _________ ^ ...
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()); } } } |