簡體   English   中英

我如何用二進制流代替字符串流,以避免轉換?

[英]How can I substitute a binary stream for a string stream, to avoid casting?

我目前正在研究將復雜的CGAL對象實例傳輸到其他進程的幾種方法。 在另一篇文章中,我詢問了自定義分配器,但是另一種方法是字符串流。 (FYI共享內存不是一種選擇)

當前的CGAL :: Nef_polyhedron_3提供iostreaming:

// 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

僅摘錄班級成員之一的話(1481年):

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

這樣做需要花費數千點。 在輸出端,它更快(不確定為什么會這樣)

有什么辦法可以提供某種二進制流,而不能完成所有轉換? 我知道一個人可以使用read(),write()以二進制形式寫入任何流,但我不能(輕松地)更改CGAL SNC_io_parser.h。 我想理想情況下,我希望能夠提供一種流,當被要求以兩種方式流式傳輸時(以任何一種方式)。

非常感謝任何幫助。

馬可斯

原因是(我猜是)所有的鑄造工作……這樣做要花數千點時間。 在輸出端,它更快(不確定為什么會這樣)

您可能希望在事件探查器下運行它,以便能夠確定何時花在哪里。

有什么辦法可以提供某種二進制流,而不能完成所有轉換?

您正在使用std::ostreamoperator<<()std::istreamoperator>>()該序列運算類型和從文本和這種行為不能被改變的接口。

您可以復制Nef_polyhedron_3的序列化函數,並使它們接受一些其他類型的序列化為二進制格式的流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM