我有一个问题:我将从外部来源获取数据。不幸的是,我将分批获取这些数据。
伪代码中的函数如下所示:
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) ;
在流中返回一个或多个位。
使用这样的接口可以隔离块数据的固有混乱。