W języku Java i C# istnieje kilka klas buforowania strumieni: BufferedStream
w języku C#, Buffered(Input|Output)Stream
i Buffered(Reader|Writer)
.Jak działa buforowanie strumieni?
Dostają trochę strumienia w konstruktorze i implementują ten sam interfejs.
Pytanie brzmi - jak to działa?
Co się stanie, gdy próbuję odczytać jeden bajt? Czyta dużą ilość bajtów w buforze wewnętrznym, a następnie zwraca go do bajtu po bajcie? Pisząc jeden bajt? Zapisuje do wewnętrznego bufora i na flush()
zapisuje go do strumienia wewnętrznego?
A co z odczytywaniem/pisaniem tablicy bajtów - czy jest to niewydajne w przypadku buforowanych strumieni, które powodują podwójne kopiowanie bajtów do wewnętrznej tablicy?
Tak więc buforowany strumień jest przydatny, jeśli czytam dużo bajtów i chcę czytać bajt po bajcie, nie myśląc o wczytaniu do bufora? I jest bezużyteczne, jeśli chcę ręcznie odczytać tablicę bajtów w moim buforze? – VorobeY1326
Strumień buforowany jest przydatny, jeśli źródło danych ma pewne obciążenie związane z żądaniami, a użytkownik chce ograniczyć liczbę żądań. Dysk twardy trwa około 1/120 sekundy, aby całkowicie się obrócić, więc jeśli pobierzesz z niego 120 znaków, znak po znaku, w najgorszym przypadku może zająć całą sekundę. Ale jeśli pobierzesz wszystkie 120 znaków naraz, możesz to zrobić w jednym obrocie. Oczywiście, możesz stworzyć własny bufor, ale po co odkrywać nowe koło? –
Należy zauważyć, że obiekt FileStream w .NET jest już wystarczająco buforowany do użycia z dyskiem twardym. Potrzebujesz tylko "BufferedStream", jeśli czytasz pakiety TCP z gniazda lub coś w tym stylu. –