基于WinINet实现的网络库中有趣知识点收集(4) - 如何调优读取服务器最终传回来的数据

    InternetReadFile 是 Windows API 中的一个函数,用于从一个已经打开的 Internet 连接中读取数据。这个函数通常用于从通过 HTTP、FTP 或其他协议获取的网络资源(如网页、文件等)中读取数据。当你建立了一个 Internet 连接并尝试从中读取数据时,可以将这个过程想象成一个正在流动的水流,而 InternetReadFile 则是用来从这个水流中装水的容器。

  1. 初始情况: 开始时,Internet 连接中的数据流可能是空的,或者只有很少的数据。如果你调用 InternetReadFile 并没有数据可读,它会等待,直到有数据可供读取或者发生错误返回 FALSE

  2. 数据的积累: 当网络连接从服务器获取数据时,这些数据会被逐步填充到数据流中,就像水流中的水不断流动一样。这些数据会在连接中被积累,直到你通过 InternetReadFile 来读取它们。

  3. InternetReadFile 的作用: 当你调用 InternetReadFile 函数来读取数据时,它就像是一个水杯,用来从数据流中舀水(数据)。这个函数会从数据流中读取指定数量的字节,然后将这些字节存储到你提供的缓冲区中。

  4. 数据流的大小大于读取量: 如果数据流中的数据量远大于你通过 InternetReadFile 设置的一次读取的量,那么在第一次读取时,它会从数据流中读取部分数据,填满你提供的缓冲区。然后,你可以再次调用 InternetReadFile 来继续读取剩余的数据。

        总的来说,Internet 连接中的数据流是一个不断变化的、积累数据的过程。InternetReadFile 则是用来从这个数据流中读取数据,但它并不会改变数据流本身,只是将数据从流中读取到你的缓冲区中。如果数据流中的数据量超过了一次读取的量,你需要多次调用 InternetReadFile 来完全读取这些数据。

    需要注意的另一个问题是,InternetReadFile 函数本身并不知道读取到的数据的编码方式(UTF-8、UTF-16、UTF-32等)。它只负责将从网络连接中读取的原始字节数据存储到 lpBuffer 所指向的内存中,而不会对数据的编码进行解析或转换。对于不同的编码,你接下来需要使用不同的方法和库来进行解码,以正确地处理这些数据。

BOOL InternetReadFile(
  HINTERNET hFile,
  LPVOID    lpBuffer,
  DWORD     dwNumberOfBytesToRead,
  LPDWORD   lpdwNumberOfBytesRead
);
  • hFile:一个已经打开的 Internet 连接句柄。
  • lpBuffer:指向接收数据的缓冲区的指针。
  • dwNumberOfBytesToRead:要读取的字节数。
  • lpdwNumberOfBytesRead<
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值