【发布时间】:2021-08-06 11:44:25
【问题描述】:
我有一个 Dart/Flutter 移动应用程序,它通过从服务器下载文件来进行自我配置。这些文件是 ZLib 压缩的,无头,并且这个过程一直运行良好 - 直到现在。这是相关代码
static Future<String> fileFetch(String url) async
{
final HttpClientRequest request = await HttpClient().getUrl(Uri.parse(url));
final HttpClientResponse response = await request.close();
return await response.pipe(Accumulator());
}
Acccumulator 类处理实际文件下载 + ZLib 解码的位置
import 'dart:io';
import 'dart:async';
class Accumulator extends StreamConsumer<List<int>>
{
List<int> accu = List.empty(growable:true);
String originalText()
{
ZLibCodec zlc = ZLibCodec(raw:true);
print('Accu ${accu.length}');
List<int> uncompd = zlc.decode(accu);
String text = String.fromCharCodes(uncompd);
return text;
}
void whenData(List<int> data){accu.addAll(data);}
void whenErr(e){XLog.e('Accu',e.toString());}
@override
Future<void> addStream(Stream<List<int>> s) async
{
s.listen(whenData);
return;
}
@override
Future<dynamic> close() async
{
return Future.value(originalText());
}
}
大多数情况下,返回的orignalText 是 JSON。现在开始导致文件下载不完整的违规文件长度为 132Kb,我发现仅下载了 42894 字节的原始(压缩)文件。
为什么会发生这种情况 - 累加器可以处理多少的内在限制?
【问题讨论】:
标签: android flutter dart stream