我有一个问题:我将从外部来源获取数据。不幸的是,我将分批获取这些数据。

伪代码中的函数如下所示:

stringy chunk;

recievedata(stringy incomingdata,number size_of_incoming_data){

chunk=malloc(size_of_incoming_data)
chunk=incomingdata
}


但是,传入的数据是一个字符串,必须对其进行彻底分析,并且很有可能将数据的目标单词以不可预测的方式拆分为多个块。为了记录起见,OpenSSL的curl库调用了此函数多次以传递正在接收的数据。

就像上面的pusedocode一样,这将继续覆盖旧数据。我可以使用缓冲区来解决此问题,例如:

    stringy chunk;
    stringy buffer;

    recievedata(stringy incomingdata,number size_of_incoming_data){

    if (chunk is assigned) {
      buffer = chunk;
      chunk=malloc(size_of_incoming_data+size_of_old_data)
      chunk = buffer + incomingdata
      free (buffer)
    }
    }


las,这似乎太可怕了。我发现非常丑陋,因为没有功能原因,我有两个具有相同数据的两个副本。因为这是运行其他事情要做的机器的守护进程,所以我需要对诸如内存之类的资源尽可能地保持保守。

有人会以这种方式处理数据的最有效方法启发我吗?

谢谢。

最佳答案

处理数据块的惯用方法是建立一个更高级别的接口,将该接口视为流。例如,您可能有

     char nextByteInStream () ;


获得一个字节(忽略错误处理参数)。要么

     void nextBytes (char *, int count) ;


返回多个字节。

在压缩中,通常具有以下内容:

    unsigned int nextBits (int count) ;


在流中返回一个或多个位。

使用这样的接口可以隔离块数据的固有混乱。

10-02 03:23
查看更多