dsc71976 2016-07-11 12:42
浏览 187
已采纳

为什么从byte.Buffer读取时出现永无休止的循环

Currently I'm writing a program that is reading a buffer from bytes.Buffer. Its supposed to stop reading when it finds the character e. But when I was reading the buffer using a for loop I noticed something odd. When I put the byte reading as part of the for statement I get an infinity loop (example in go playground):

b := bytes.NewBuffer([]byte("uoiea"))
for v, _ := b.ReadByte(); v != 'e'; {
    println("The value is " + string(v))
}

But if I removed it and put it inside the for loop, it doesn't (example in go playground):

b := bytes.NewBuffer([]byte("uoiea"))
for ;; {
    v, _ := b.ReadByte()
    println("The value is " + string(v))
    if v == 'e'{
        break
    }
}

Does anyone know why is this? I find it that adding the break expression is a very ugly and error prone way to solve this.

  • 写回答

2条回答 默认 最新

  • doulie0178 2016-07-11 12:48
    关注

    Because your post statement of the for-loop is empty (you have only init statement), so you don't read next byte every iteration (v is always 'u').

    Here is the fixed version:

    b := bytes.NewBuffer([]byte("uoiea"))
    for v, _ := b.ReadByte(); v != 'e'; v, _ = b.ReadByte() {
        println("The value is " + string(v))
    }
    

    As mentioned in comments, it's also recommended to check the error to avoid infinite loop when there is no 'e' byte:

    b := bytes.NewBuffer([]byte("uoiea"))
    for v, e := b.ReadByte(); v != 'e' && e == nil; v, e = b.ReadByte() {
        println("The value is " + string(v))
    }
    

    ReadBytes returns io.EOF error when buffer is empty.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵