gpt4 book ai didi

file-io - 如何读取/写入对象到文件?

转载 作者:行者123 更新时间:2023-12-03 01:19:46 26 4
gpt4 key购买 nike

我想将一个对象(一个简单的集合)写入文件。我环顾四周,发现this questionthis question 。我还浏览了很多链接断开等的网站,但我似乎无法找到在 Smalltalk 中写入文件的方法。我尝试了这个(和其他事情,但它们归结为相同):

out := 'newFile' asFileName writeStream.
d associationsDo: [ :assoc | out
nextPutAll: assoc key asString;
nextPut: $, ;
nextPutAll: assoc value asString; cr. ]
out close.

按照链接问题中的建议,但它似乎没有做任何事情。它不会引发错误,但我也没有找到任何文件。

我唯一想做的就是保留我的对象(二进制或文本并不重要),那么我该怎么做呢?

提前致谢

最佳答案

您正在做的是在字符串上创建写入流。这实际上是有效的,但信息存储在字符串对象上,不会写入任何文件。

这适用于 Squeak 和 Pharo(可能还有其他方言):

FileStream
forceNewFileNamed: 'filename.ext'
do: [ :stream |
d associationsDo: [ :assoc |
stream
ascii; "data is text, not binary"
nextPutAll: assoc key asString;
nextPut: $, ;
nextPutAll: assoc value asString;
cr ] ].

在 Pharo 中你可以这样写:

'filename.ext' asFileReference writeStreamDo: [ :stream |
... ].

但请注意,有更好的方法可以在文件中存储结构化数据,例如STON (Smalltalk 对象表示法,JSON 的 Smalltalk 版本)或 XML。如果您想保留对象,您可能需要查看 Fuel , StOMP (可能不再支持)或任何其他对象序列化器。

最后还有 ImageSegment,一个基于 VM 的对象序列化器(不需要额外的包),但您可能需要一些帮助。

关于file-io - 如何读取/写入对象到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34723705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com