c#.net中Stream.read()方法存在问题

c#.net中Stream.read()方法存在问题,c#,stream,C#,Stream,程序没有响应 问题是什么?您没有在流上设置ReadTimeout,并且没有数据,因此调用将阻塞,直到数据可用为止 检查Stream.ReadTimeout和.WriteTimeout的属性 此外,请记住,您知道您需要的数据,但不知道会有多少数据(失败、错误等),因此您也应该检查这些数据。在数据可用之前,提供流的任何数据都会被阻塞。从MSDN的文档中: 该实现将一直阻止到 至少可以读取一个字节的数据,以 没有可用数据的事件。 Read仅在没有数据时返回0 流中有更多数据,不再需要更多数据 预期的(

程序没有响应


问题是什么?

您没有在流上设置ReadTimeout,并且没有数据,因此调用将阻塞,直到数据可用为止

检查Stream.ReadTimeout和.WriteTimeout的属性


此外,请记住,您知道您需要的数据,但不知道会有多少数据(失败、错误等),因此您也应该检查这些数据。

在数据可用之前,提供流的任何数据都会被阻塞。从MSDN的文档中:

该实现将一直阻止到 至少可以读取一个字节的数据,以 没有可用数据的事件。 Read仅在没有数据时返回0 流中有更多数据,不再需要更多数据 预期的(如闭合的插座或 文件结束)

您可以在流上设置读取超时,以防止永久阻塞


另一方面,请注意,从流中读取将移动当前位置,因此使用偏移逻辑,您可能会跳过输入流中的大块数据。

您可以尝试此方法。此代码将从流中读取字节到字节[]:

int read = stream.Read(data, offset, remaining);

了解流的类型对于能够正确回答您非常重要。为什么您必须手动从流中读取数据?Grzenio!从Stream读取数据的另一种方法是什么这仍然存在FileStream.read的问题,而不是重新读取所有数据,因此您需要一个循环来确保所有数据都已读取。
int read = stream.Read(data, offset, remaining);
    public static byte[] GetBytesFromStream()
    {
        FileStream fs = new FileStream("d:/pic.jpg", FileMode.Create);
        byte[] bytes = new byte[fs.Length];
        fs.Read(bytes, 0, (int)fs.Length);
        fs.Close();
        return bytes;
    }