无法获取从 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)
写入后。
假设我有这样的类型:
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)
写入后。