如何将二进制流替换为字符串流,以避免转换?

时间:2013-03-28 13:09:16

标签: c++ iostream stringstream steam

我正在研究一些将复杂的CGAL对象实例转移到另一个进程的方法。在另一篇文章中,我询问了自定义分配器,但另一种方法是字符串流。 (仅供参考共享内存)

目前的CGAL :: Nef_polyhedron_3提供了流言蜚语:

// In main process
Nef_polyhedron_3 NP3;
stringstream ss;
ss << NP3;
sendToOtherProcess(ss.str());

// In separate process
stringstream ss(stringFromOtherProcess);
Nef_polyhedron_3 NP3;
ss >> NP3;

现在,输出流速很慢,输入流速慢了四倍。

原因(我猜)是所有的演员。可以在此处找到执行此操作的课程:https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_3/SNC_io_parser.h

只取一个班级成员的片段(ln 1481):

  in >> hx >> hy >> hz >> hw;
  vh->point() = Point_3(hx,hy,hz,hw);

为数千个点做这件事需要一段时间。在输出端它更快(不确定为什么确切)

有什么方法可以提供某种二进制流,不能完成所有的转换吗?我知道可以使用read(),write()写入二进制流中的任何流,但我不能(轻松地)更改CGAL SNC_io_parser.h。我想理想情况下我希望能够提供一个流,当被要求流(无论哪种方式)时,它是以二进制形式完成的。

感激不尽的任何帮助。

马科斯

1 个答案:

答案 0 :(得分:1)

  

原因(我猜)是所有的演员......为数千个点做这件事需要一段时间。在输出端它更快(不确定为什么确切)

您可能希望在分析器下运行它,以便能够确定地花费时间。

  

有什么方法可以提供某种二进制流,不能完成所有的转换?

您正在使用std::ostream operator<<()std::istreamoperator>>()接口,这些接口将算术类型序列化为文本,并且无法更改此行为。

您可以复制Nef_polyhedron_3的序列化函数,并使它们接受其他一些序列化为二进制格式的流类型。