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

时间:2015-06-12 01:06:15

标签: nim

说我有这样的类型:

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`

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

2 个答案:

答案 0 :(得分:3)

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

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

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

即可
s.setPosition(0)
写完后

答案 1 :(得分:2)

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