ESP8266 无法将字符添加到超长字符串(>8000 个字符)

ESP8266 Fails to add char to a very long String (>8000 chars)

从 HTTPS 请求中正确获取负载后,将客户端的字符添加到字符串中会在大约 8000 个字符后停止,然后恢复并再次停止几次 这是我的代码片段:

long streamSize = 0;
Serial.println("Now reading payload...");
while (stream.connected()) {
    while (stream.available() > 0) {
        char ch = (char)stream.read();
        Serial.println((String)"Reading [" + ++streamSize + "] " + ch);
        ret += ch;
        Serial.println(ret.length());
    }
}

效果很好,直到:

Reading [8685] t
8685
Reading [8686] r
8686
Reading [8687] u
8687
Reading [8688] m
8687
Reading [8689]  
8687
Reading [8690] e
8687
[Resumes correctly appending chars]
Reading [9226] i
8748
Reading [9227] p
8749
Reading [9228] t
8750
Reading [9229] i
8751
Reading [9230] o
8751
Reading [9231] n
8751

以此类推好几次。 内存堆大小似乎不是问题,因为在附加所有内容后我从 system_get_free_heap_size() 获得了 14128 个空闲字节。 我正在使用 Wemos D1 R1 和 this is the file I'm trying to fully read 进行测试,使用 Github API

我发现 Arduino 可能由于可用内存不足而无法连接字符串。此外,Arduino 中的 String class 似乎没有错误处理程序,因此当 - 例如 - 内存太零散时,它可能会悄无声息地失败。

看这里:from Arduino forum 在这里:from a discussion in Stack Overflow

在许多情况下,他们建议您可以使用 String reserve(int) 调用预先分配缓冲区。

也许您无法提前知道您的字符串会增长到多大,但也许您可以管理它。例如,通过两次调用 https 目标。第一次只是想知道你的答案有多大(这样你就可以分配确切的内存量);第二次有效阅读。