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