无法获取从 marshal 创建的 StringStream 以输出数据

Unable to get StringStream created from marshal to output the data

假设我有这样的类型:

type
  Foo = object of RootObj
    f1: string
  Bar = object of Foo
    b1: string

我整理了一个这样的实例:

var bar: Bar
bar.f1 = "FOO"
bar.b1 = "BAR"

var s = newStringStream()
s.store(bar)

我可以直接读取它的数据:

echo s.data # outputs {"b1": "BAR", "f1": "FOO"}

但我无法使用 readLine() 或任何其他阅读程序阅读它:

var line: TaintedString = ""
while s.readLine(line):
    echo line

根本就没有输出。


如果我不使用 marshal.store 创建数据,它工作正常。

var s = newStringStream("foo\nbar")

var line: TaintedString = ""
while s.readLine(line):
    echo line # outputs `foo` then `bar`

所以我似乎遗漏了一些可能非常基本和明显的东西。知道那可能是什么吗?

StringStream 的读和写位置值相同。在尝试阅读之前,您是否将 setPosition 设置为 0?

流像文件一样工作;当您写入它们时,文件中的当前位置会随着写入而移动。您可以在通话前后使用 echo s.getPosition 观察这一点。

如果您从字符串创建新的字符串流,位置将设置为零。

为了完成这项工作,只需使用

s.setPosition(0)

写入后。