2009-02-26 41 views
26

Các tài liệu chỉ đơn giản nói ReadBlock làSự khác nhau giữa StreamReader.Read và StreamReader.ReadBlock

"một phiên bản chặn của Đọc"

nhưng điều đó nghĩa là gì?

Có người khác đã đặt câu hỏi trước nhưng, huh?

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

Các trả lời chàng nói

Về cơ bản, nó có nghĩa là bạn có thể dựa vào StreamReader.ReadBlock không trở về cho đến khi một trong hai nó đọc càng nhiều càng tốt bạn đã hỏi nó, hoặc nó đã đến cuối luồng.

Tôi hiểu chính xác rằng điều này là bắt buộc vì Đọc có thể không cung cấp cho bạn mọi thứ bạn yêu cầu? Và điều đó chỉ vì nó trả về 0 KHÔNG có nghĩa là bạn đã đến cuối tập tin?

Vì vậy, điều này có nghĩa là kiểm tra điều gì đó khác với số byte được trả lại (EndOfStream?) Hoặc sử dụng ReadBlock thay thế?

+0

Cũng thấy [C# - Khi nào thì sử dụng StreamReader.ReadBlock()? - Stack Overflow] (http://stackoverflow.com/questions/3810455/when-to-use-streamreader-readblock). – user34660

Trả lời

31

ReadBlock không có nghĩa là chỉ an toàn. Nếu bạn sử dụng Reflector để xem xét việc thực hiện StreamReader.ReadBlock (được thừa kế từ TextReader.ReadBlock), tất cả những gì nó làm là thực hiện nhiều cuộc gọi đến phương thức "Read" cho đến khi phương thức "Read" trả về 0 hoặc chúng ta đã đọc nhiều byte theo yêu cầu. Điều này là cần thiết bởi vì phương thức "Đọc" sẽ không nhất thiết trả về nhiều byte như bạn đã yêu cầu.

+0

Nếu ReadBlock chỉ đơn thuần là defers để Read cho đến khi Read trả về 0, điều gì sẽ xảy ra nếu Read trả về 0 nhưng kết thúc luồng không đạt được? Hay điều đó là không thể? Nếu Read chỉ trả về những gì đã sẵn sàng, tôi đã nghĩ rằng về mặt lý thuyết có thể là 0 có thể được trả lại bất cứ lúc nào? Hay là sai? –

+1

@J M: trở về 0 luôn cho biết rằng kết thúc của luồng đã đạt được, vì vậy đọc thực sự cũng chặn cho đến khi nó nhận được * cái gì đó * –

+2

Ah - đó là phần cuối cùng sau đó. Đọc khối cho đến khi nó ít nhất có một cái gì đó và ReadBlock khối cho đến khi nó có tất cả mọi thứ bạn yêu cầu hoặc nó nhấn vào cuối của tập tin. Dù bằng cách nào, 0 có nghĩa là kết thúc tệp. Điều đó thật tuyệt vời và cảm ơn. –

Các vấn đề liên quan