我只是在编写一个简单的方法来从一般流中读取数据 - 这意味着它可能是一个FileStream或NetworkStream而不知道它的长度.我重复将流读入byte []并将数据推送到另一个流或其他任何流.我的问题是,我怎么能注意到流完成了?我试图在Read方法返回0 时返回 - 这是正确的方法吗?它似乎可以读取文件,但有时会遇到从网络读取数据的问题.
是的,Read
反复调用并在返回0时完成是完全正确的方法.
网络流也很好 - 它们将阻塞,直到收到任何数据或流被断开.查看以下文档Stream.Read
:
仅当位置当前位于流的末尾时,返回值才为零.在没有数据可用的情况下,实现将阻塞,直到可以读取至少一个字节的数据.只有当流中没有更多数据并且不再需要更多数据(例如关闭的套接字或文件末尾)时,read才返回0.