用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

发帖

C# streamreader.peek()方法意外返回-1

[复制链接]
  • TA的每日心情
    开心
    2021-12-5 21:55
  • 208

    主题

    293

    帖子

    1万

    积分

    超级版主

    Rank: 8Rank: 8

    积分
    14437
    发表于 2016-7-28 16:43:21
    本帖最后由 zhu 于 2016-7-28 16:44 编辑

    当按行读取字节流时,一般都会使用以下方式读取
    1. stream = response.GetResponseStream();
    2.     reader = new StreamReader(stream, ConfigHelper.MyEncoding);
    3.     while (reader.Peek() > -1)
    4.     {
    5.         string x = reader.ReadLine();
    6.         if (x != null)
    7.         {
    8.           //.......
    9.          }
    10.     }
    复制代码
    但是peek()方法有时候会未读到末尾就意外返回-1了。建议使用以下方法代替:
    1. while (stream.CanRead && (x = reader.ReadLine()) != null)
    复制代码
    关于Peek方法的说明,MSDN的解释如下:
    返回值System.Int32
    为表示下一个要读取的字符的整数,或者,如果没有要读取的字符或该流不支持查找,则为 -1
    备注
    Peek 方法返回一个整数值,以便确定是否发生了该文件或另一个错误的末尾。这样就允许用户以首先检查返回的值是否为-1 之前它强制转换为类型。

    使用道具 举报 回复
    发表于 2016-7-29 16:19:41
    不错,完美的解决了我们问题,支持一下
    使用道具 举报 回复 支持 反对
    发表于 2018-10-22 19:29:26
    Peek 方法返回一个整数值,以便确定是否发生了该文件或另一个错误的末尾。这样就允许用户以首先检查返回的值是否为-1 之前它强制转换为类型。
    使用道具 举报 回复 支持 反对
    严禁恶意灌水!!!拒绝伸手党!!!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    ض