2

假设我有这样的类型:

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`

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

4

2 回答 2

3

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

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

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

s.setPosition(0)

写完之后。

于 2015-06-12T10:28:36.197 回答
2

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

于 2015-06-12T10:27:45.507 回答