-2

我有一个组件,它使用 TWriter 类将不同的信息写入 blob。问题是某些 blob 已不正确地保存到 blob 中(或在另一个数据序列下),我需要以某种方式纠正这些错误。当我期待WriteListBeginWriteListEnd并且我收到 EReadError“无效的属性值”时,问题就出现了。我正在考虑逐字节读取流,并知道这些分隔符的位置。我怎么知道我遇到的是 WriteListBegin 还是 WriteListEnd?

LE:这个问题不能像评论所说的那么容易解决。我不知道供应商,所以我不能询问详细信息。关于 TWriter 机制背后的内容,这是下面的汇编例程,我不明白字节写的是什么

写入器对象的关联流的列表开始标记

过程 TWriter.Write(const Buf; Count: Longint); 汇编器;

可能我会开始编写自己的自定义 TReader 以修复虚假流。

4

2 回答 2

1

如果我很好地解决了您的问题,那么我了解您的数据已损坏,显然这些数据无法正确解析。具体来说,列表开始和结束标记丢失,或者顺序错误或位置错误。

我可以想到四种解决方案来解决这个问题:

  1. 请参阅以获取未损坏的数据(询问供应商)。
  2. 手动修复数据(如果在合理的大小范围内)。
  3. 编写一个自己的自定义解析器来自动修复标记,并提前使用它。
  4. 对每一行使用TWriter, 记住 current Position,检查当前行,重写,替换或忽略该行以防损坏,并在必要时返回旧位置。

如果多个数据块以相同的方式损坏,部分手动调查 (2) 可能会立即导致自定义解析器 (3)。

于 2013-03-25T22:22:24.503 回答
0

我通过读取数据类型直到读者解决了这个问题。大多数 blob 的EndOfList分隔符。

谢谢大家,尤其是-1

于 2013-03-26T13:39:22.927 回答