Buffer ist englisch für Puffer. Wobei Buffer allgemein imho sehr viel gebräuchlicher ist.
Von einen BufferedString habe ich noch nie was gehört.
Benötigt werden sie z. B. wenn du eine Datei kopierst. Du kannst z. B. eine Datei komplett lesen, und dann auf die HDD runterschreiben. Aber ab 1 GB Dateigröße wird das ganz schön haarig. Deshalb läuft es idR. so ab:
Buffer erzeugen (meistens byte[]) -> von der HDD im Buffer schreiben -> vom Buffer auf die HDD schreiben -> von der HDD im Buffer schreiben und dabei die alten Werte ersetzen -> vom Buffer auf die HDD schreiben -> usw.
So können im Hintergrund die alten Daten aus den RAM entfernt werden.
Ein anderes Anwendungsgebiet wäre, falls eine Ressource (z. B. CPU) beschäftigt ist, die Daten zwischengespeichert werden und erst später bearbeitet werden können. Machen z. B. Streams so. Könntest du testen indem du abwechselnd im Out und Err-Stream schreibst. Dabei landen die Daten nicht synchron in der Ausgabe, da sie zu unterschiedlichen Zeiten flushen. (Also den Buffer zum Output senden.)