2009-02-26 11 views
26

Dokumentacja mówi po prostu ReadBlock jestRóżnica między StreamReader.Read i StreamReader.ReadBlock

„wersja blokowanie Read”

ale co to znaczy?

Ktoś jeszcze zadał pytanie, ale, hę?

http://www.pcreview.co.uk/forums/thread-1385785.php

Facet odpowiadając rzekł

Zasadniczo, to oznacza, że ​​można polegać na StreamReader.ReadBlock nie powrocie dopóki nie jest to tak dużo czytać jak pan zapytał go, czy dotarł do końca strumienia.

Czy poprawnie rozumiem, że jest to wymagane, ponieważ Read może nie dać Ci wszystkiego, o co prosiłeś? A to tylko dlatego, że zwraca 0, NIE oznacza, że ​​dotarłeś do końca pliku?

Oznacza to, że należy sprawdzić coś innego niż liczbę zwróconych bajtów (EndOfStream?) Lub zamiast tego użyć ReadBlock?

+0

Zobacz także [C# - Kiedy używać StreamReader.ReadBlock()? - Stack Overflow] (http://stackoverflow.com/questions/3810455/when-to-use-streamreader-readblock). – user34660

Odpowiedz

31

ReadBlock nie oznacza, że ​​jest bezpieczny dla wątków. Jeśli użyjesz Reflectora do obejrzenia implementacji StreamReader.ReadBlock (która jest dziedziczona z TextReader.ReadBlock), wszystko, co robi, to wykonywanie wielu wywołań do metody "Read" do momentu, aż metoda "Read" zwróci 0 lub odczytamy jako wiele bajtów na żądanie. Jest to konieczne, ponieważ metoda "Read" niekoniecznie zwróci tyle bajtów, ile zażądałeś.

+0

Jeśli ReadBlock ogranicza się tylko do odczytu, dopóki Read nie zwróci 0, co się stanie, jeśli Read zwróci 0, ale koniec strumienia nie zostanie osiągnięty? Czy to niemożliwe? Jeśli Read tylko zwróci to, co jest gotowe, pomyślałbym, że teoretycznie jest możliwe, że 0 może zostać zwrócone w dowolnym momencie? Czy to źle? –

+1

@J M: return 0 zawsze oznacza, że ​​koniec strumienia został osiągnięty, więc Read tak naprawdę blokuje się dopóki nie otrzyma * czegoś * –

+2

Ah - to jest ostatni kawałek. Czytaj bloki, dopóki przynajmniej czegoś nie ma i ReadBlock blokuje, dopóki nie dostanie wszystkiego, o co poprosiłeś, lub trafi na koniec pliku. Tak czy inaczej 0 oznacza koniec pliku. To wspaniale i dzięki. –