从HTTPS请求正确获取有效负载后,将客户端的字符添加到String中后,大约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进行测试
参见此处:from Arduino forum此处:from a discussion in Stack Overflow
在许多情况下,他们建议您可以通过
String reserve(int)调用来预先分配缓冲区。
也许您无法预先知道弦将增长到多大,但是也许您可以管理它。例如,通过两次调用您的https目标。第一次只是想知道答案有多大(这样您就可以分配确切的内存量);第二次有效阅读。