是否可以使用平面缓冲区将序列化数据流式传输到文件中?
Is it possible to stream serialized data into file with flatbuffers?
我正在 node.js 制作在线游戏并尝试在我的游戏服务器上保存游戏回放。我正在使用平面缓冲区来序列化客户端-服务器通信的数据,我认为将我的游戏状态逐帧保存在文件中会很酷。
我在 .fbr
文件中创建了以下 table
table Entity {
id: ushort;
pos: Vec2;
}
table Frame {
entities: [Entity];
}
table Replay {
frames: [Frame];
}
有没有办法将所有游戏状态帧即时写入文件?我知道我可以只缓冲 N 帧并将它们保存在单独的重播文件中,但我觉得应该有更好的方法。我希望我的replay在一个文件里,不然以后用起来很不方便
最好的方法是确保每个单独的 FlatBuffer 都是一个 "size prefixed buffer"(它在实际缓冲区之前有 32 位大小),在 JS 中你可以通过调用它来创建它通常的 finish
函数:https://github.com/google/flatbuffers/blob/6da1cf79d90eb242e7da5318241d42279a3df3ba/js/flatbuffers.js#L715
然后你将这些缓冲区一个接一个地写入一个打开的文件中。读的时候,因为buffer是从一个size开始的,所以可以一个一个的处理。我在 JS 中没有看到任何辅助函数,因此您可能必须自己执行此操作:读取 4 个字节以找出大小,然后读取大小字节,重复。
我正在 node.js 制作在线游戏并尝试在我的游戏服务器上保存游戏回放。我正在使用平面缓冲区来序列化客户端-服务器通信的数据,我认为将我的游戏状态逐帧保存在文件中会很酷。
我在 .fbr
文件中创建了以下 table
table Entity {
id: ushort;
pos: Vec2;
}
table Frame {
entities: [Entity];
}
table Replay {
frames: [Frame];
}
有没有办法将所有游戏状态帧即时写入文件?我知道我可以只缓冲 N 帧并将它们保存在单独的重播文件中,但我觉得应该有更好的方法。我希望我的replay在一个文件里,不然以后用起来很不方便
最好的方法是确保每个单独的 FlatBuffer 都是一个 "size prefixed buffer"(它在实际缓冲区之前有 32 位大小),在 JS 中你可以通过调用它来创建它通常的 finish
函数:https://github.com/google/flatbuffers/blob/6da1cf79d90eb242e7da5318241d42279a3df3ba/js/flatbuffers.js#L715
然后你将这些缓冲区一个接一个地写入一个打开的文件中。读的时候,因为buffer是从一个size开始的,所以可以一个一个的处理。我在 JS 中没有看到任何辅助函数,因此您可能必须自己执行此操作:读取 4 个字节以找出大小,然后读取大小字节,重复。