Chaque opération de lecture ou d'écriture peut être très coûteuse sur certains flots ; c'est notamment le cas des accès à un fichier, ou pire, des accès à l'Internet. Pour éviter des opérations individuelles (sur un octet à la fois), on préfère souvent travailler sur un tampon (anglais buffer). Par exemple, pour écrire sur un fichier, on écrira sur un flot-tampon, lequel délègue les écritures à un flot sur un fichier. Les classes qui mettent en 3#3uvre ces tampons sont :
L'exemple suivant, qui empile trois constructeurs, permet d'ajouter successivement un tampon d'écriture et les méthodes d'impression textuelle à un flot d'écriture sur fichier :
PrintStream out = new PrintStream( // décorateur new BufferedOutputStream( // décorateur new FileOutputStream("out.txt"))); // délégué out.println(2); out.println(new Integer(2));