java.io.BufferedInputStream wraps another InputStream (like FileInputStream) to add buffering functionality. Both implement the InputStream interface, and BufferedInputStream adds behavior (buffering for performance) without changing the underlying stream - this is the Decorator pattern in action. java.util.List and java.lang.String are not examples of Decorator.