【发布时间】:2020-05-29 22:20:20
【问题描述】:
我需要用 zlib(大约 500 KiB)给大字符串充气,我注意到当使用一个小缓冲区时,输出被破坏(随机字母被转换成乱码)但是当切换到一个大缓冲区时,输出没有被破坏。
这是我的代码:
std::string str;
std::lock_guard<std::mutex> lock(mutex_);
stream_.next_in = (unsigned char*)deflated.data();
stream_.avail_in = deflated.size();
int result = Z_OK;
do
{
char buffer[1024] = { 0 };
stream_.next_out = reinterpret_cast<unsigned char*>(buffer);
stream_.avail_out = sizeof(buffer);
result = ::inflate(&stream_, Z_NO_FLUSH);
str.append(buffer);
} while (result == Z_OK);
inflated = std::move(str);
现在在 1024 处,输出已损坏,但如果我将其切换为 256 KiB(字符缓冲区 [263168]),则输出正常。不用切换到这么大的缓冲区,如何解决这个问题?
【问题讨论】:
-
在您尝试将结果附加到 str 之前,我可能会添加一个检查以查看结果是否成功。