[QDB] 使用 TQConverter 直接将数据流从一种格式转换为另一种格式

TQConverter 新增了SaveToConverter / LoadFromConverter 方法来简化数据流格式的转换,支持从流中和文件中转换数据格式后保存到另一个流或文件中。

下面的示例代码演示了:

  1. 将当前 FDataSet 数据集的内容使用 TQBinaryConverter 来保存到 ASourceStream 中( QDB 原生的二进制格式 )。
  2. 将 ASourceStream 的内容,通过调用 TBinaryConverter .SaveToConverter 方法,通过 TQMSSQLConverter 转换器,保存到 SQL 脚本数据流  ATargetStream 中。
  3. 将  ATargetStream 中的数据流通过 LoadTextW 函数加载并显示到 Memo1 中,呈现给用户。

上面的代码,实际上除去准备流数据和显示那块,只用了一句话

ASource.SaveToConverter(ADest,ASourceStream,ADestStream);

就完成了格式的转换。当然,如果你想直接转换到文件,简单的将上面的流换成文件名即可。我们来详细了解下 TQConverter 的 LoadFromConverter 和 SaveToConverter 方法。

实际上,两个函数我们可以认为它是逆运算 ConverterA.LoadFromConverter(ConverterB) 等价于 ConverterB.SaveToConverter(ConverterA),内部的实现实际最终也指向了同一个函数,封装成不同的接口是为了提高代码的可读性和易用性。咱们对函数的声明以 SaveToConverter 来说明:

  • AConverter : 一个转换器实例或类型。区别在于如果使用转换器实例,则你可以预先调节转换器的参数,从而控制输出到目标数据流中的数据内容、格式、进度等等,而使用类型的话,你只能采用默认参数了(这不废话嘛~~~)
  • ASourceStream/ASourceFile : 源数据流或文件名。源数据流或文件内容必需是源转换器的格式,而不是目标转换器的格式。
  • ATargetStream/ATargetFile : 目标数据流或文件名。文件时,如果目标文件不存在,会自动创建,如果存在,会自动覆盖,提示是否覆盖是上层调用者的责任。

好了,结果出来了:

directconverter

 

 

分享到:

0 条评论

沙发空缺中,还不快抢~