zoukankan      html  css  js  c++  java
  • Go语言HTTP客户端数据读取总结

    总结:

    1. 当读取的字节小于数据长度时,Read一般不会返回错误,除非数据还未接收完发生了异常(例如连接中断,读取超时等)
    2. 当读取的字节大于等于数据长度时,Read会返回读取的字节和EOF(End Of File),表示数据已经读完了。 

    数据读取的几种常用方式

    方式一

    读取指定长度数据,实际读取的数据可能小于指定的大小

    b := make([]byte, clen)
    n, err := resp.Body.Read(b)

    需要判断err是不是EOF

    方式二

    读取全部数据,直到EOF或发生错误

    1 b, err := ioutil.ReadAll(resp.Body)

    需要判断err是不是EOF

    方式三

    读取全部数据到dst,直到EOF或发生错误

    1 bb := bytes.NewBuffer(nil)
    2 n, err := io.Copy(bb, resp.Body)

    这种方式无需判断EOF错误

    io.Copy与io.CopyBuffer的区别

    共同点与区别

    io.Copy与io.CopyBuffer实际都是copyBuffer实现的,只不过io.Copy只有源src和目的dst两个参数;而io.CopyBuffer却多了一个参数buf,io.CopyBuffer不仅会将数据拷贝到dst,另外还会拷贝到buf中。

    用途

    io.Copy可以把数据从一个连接拷贝到另外一个连接,可用作代理。io.CopyBuffer既可以把数据从一个连接拷贝到另外一个连接,还可以将数据保存在一个buf中,可用作缓存(即一边接收,一边发送并且缓存)。

  • 相关阅读:
    jstl格式化日期
    linux sqlplus查询数据中文乱码解决方法记录
    MyBatis insert操作插入,返回主键from官方
    Debian apt-get 用法
    Java并发编程--Semaphore
    Java并发编程--CyclicBarrier
    Java并发编程--CountDownLatch
    Java并发编程--BlockingQueue
    Java并发编程--ReentrantReadWriteLock
    Java并发编程--Lock
  • 原文地址:https://www.cnblogs.com/zcqkk/p/13561359.html
Copyright © 2011-2022 走看看