首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在dart中读取大txt文件中的数据

如何在dart中读取大txt文件中的数据
EN

Stack Overflow用户
提问于 2021-09-02 08:29:32
回答 1查看 561关注 0票数 0

当我从一个大的txt文件中逐个读取数据时,我得到的错误是:

未完成的UTF-8八进制序列(在偏移量4096处)代码:

代码语言:javascript
复制
File file = File(path!);
RandomAccessFile _raf = await file.open();
_raf.setPositionSync(skip ?? 0);
var data = _raf.readSync(block);// block = 64*64 
content.value = utf8.decode(data.toList());
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-02 10:39:26

UTF*8是可变长度编码。错误来自于数据不对齐UTF8边界,可选的方法是在调用utf.decode之前修剪左、右的数据字节,这将丢失第一个和最后一个字符。您可以读取和添加更多字节,以覆盖最后一个字符并与utf8边界对齐。

代码语言:javascript
复制
bool isDataByte(int i) {
  return i & 0xc0 == 0x80;
}

Future<void> main(List<String> arguments) async {
  var _raf = await File('utf8.txt').open();
    _raf.setPositionSync(skip);
    var data = _raf.readSync(8 * 8);

    var utfData = data.toList();
    int l, r;
    for (l = 0; isDataByte(utfData[l]) && l < utfData.length; l++) {}

    for (r = utfData.length - 1; isDataByte(utfData[r]) && r > l; r--) {}
    var value = utf8.decode(utfData.sublist(l, r));
    print(value);
}

可选读取更多4个字节并展开以覆盖最后一个字符

代码语言:javascript
复制
bool isDataByte(int i) {
  return i & 0xc0 == 0x80;
}

Future<void> main(List<String> arguments) async {
  var _raf = await File('utf8.txt').open();
    _raf.setPositionSync(skip);
    var block = 8 * 8;
    var data = _raf.readSync(block + 4);

    var utfData = data.toList();
    int l, r;
    for (l = 0; isDataByte(utfData[l]) && l < block; l++) {}

    for (r = block; isDataByte(utfData[r]) && r < block + 4; r++) {}

    var value = utf8.decode(utfData.sublist(l, r));
    print(value);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69026727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档