说我有这样的类型:
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`
所以我似乎错过了一些非常基本和明显的东西。知道那可能是什么吗?
答案 0 :(得分:3)
Streams像文件一样工作;当你写入它们时,文件中的当前位置随着写入而移动。您可以在通话前后使用echo s.getPosition
进行观察。
如果从字符串创建新的字符串流,则位置将设置为零。
为了完成这项工作,只需使用
即可s.setPosition(0)
写完后。
答案 1 :(得分:2)
StringStream具有相同的读取和写入位置值。在尝试阅读之前,你是否将setPosition设为0?