C++ 用STL输出二进制缓冲区

C++ 用STL输出二进制缓冲区,c++,stl,binary,queue,C++,Stl,Binary,Queue,我正在尝试使用一种可以最好地描述为二进制输出队列的东西。简而言之,一个线程将用二进制数据填充队列,另一个线程将从队列中弹出此数据,并将其发送到客户端套接字 用STL做这件事最好的方法是什么?我正在寻找像std::queue这样的东西,但一次需要很多项 谢谢什么是“二进制数据”?只是内存缓冲区?您想一次推/弹出一个缓冲区吗?然后,您应该将缓冲区包装到一个类中,或者使用std::vector,并将它们推/弹出到std::deque什么是“二进制数据”?只是内存缓冲区?您想一次推/弹出一个缓冲区吗?然

我正在尝试使用一种可以最好地描述为二进制输出队列的东西。简而言之,一个线程将用二进制数据填充队列,另一个线程将从队列中弹出此数据,并将其发送到客户端套接字

用STL做这件事最好的方法是什么?我正在寻找像std::queue这样的东西,但一次需要很多项


谢谢

什么是“二进制数据”?只是内存缓冲区?您想一次推/弹出一个缓冲区吗?然后,您应该将缓冲区包装到一个类中,或者使用
std::vector
,并将它们推/弹出到
std::deque

什么是“二进制数据”?只是内存缓冲区?您想一次推/弹出一个缓冲区吗?然后,您应该将缓冲区包装到一个类中,或者使用
std::vector
,然后将它们推/弹出到
std::deque

对于多线程环境中的网络通信系统,我需要这种东西

在我的例子中,我只是用一个处理锁定的对象包装了std::queue(一般来说,std::queue不是线程安全的)。队列中的对象只是char*样式数组上非常轻量级的包装器

这些包装器还提供了以下成员函数,我认为这些函数非常有用

insertByte(unsigned int location, char value)
insertWord(unsigned int location, int value)
insertLong(unsigned int location, long value)
getByte/Word/Long(unsigned int location)
这些在这种情况下特别有用,因为单词和长值必须是byteswap,我可以将这个问题隔离到最后实际处理它的类


我们在处理“大于4字节”的二进制数据块时做了一些稍微奇怪的事情,我当时认为这会阻止我们使用std::vector,尽管现在我只会使用它,并使用&vector[x].

对于多线程环境中的网络通信系统,我需要这种东西

在我的例子中,我只是用一个处理锁定的对象包装了std::queue(一般来说,std::queue不是线程安全的)。队列中的对象只是char*样式数组上非常轻量级的包装器

这些包装器还提供了以下成员函数,我认为这些函数非常有用

insertByte(unsigned int location, char value)
insertWord(unsigned int location, int value)
insertLong(unsigned int location, long value)
getByte/Word/Long(unsigned int location)
这些在这种情况下特别有用,因为单词和长值必须是byteswap,我可以将这个问题隔离到最后实际处理它的类



我们在处理“大于4字节”的二进制数据块时做了一些稍微奇怪的事情,我当时认为这会阻止我们使用std::vector,尽管这些天我只会使用它并使用&vector[x]。

有什么理由不使用流吗?从技术上说没有,但是我不想涉及到巨大的提升,我想这就是你的意思?这不是一个真正的答案,但是你是否想过创建自己的队列来处理数据而不是使用STL?实际上,我说的是std::ostream。@Dima:在处理流式二进制数据时,我会担心性能问题@monoceres:请让我知道这是否有效,因为我也处理很多二进制数据。我很感兴趣。你有没有理由不使用streams?从技术上说没有,但我不喜欢使用giant boost,我想这就是你的意思?这不是一个真正的答案,但你有没有想过让自己的队列来处理数据而不是使用STL?我说的是std::ostream,实际上。@Dima:在处理流式二进制数据时,我会担心性能问题@monoceres:请让我知道这是否有效,因为我也处理很多二进制数据。我很感兴趣。将数据插入向量的开头不是效率很低吗?可以使用vector::reserve()分配向量中的内存,然后将数据复制到其中。最后,这取决于数据是如何生成的。你可以从一开始就把它们放在向量中。我想我会试试这个。希望不会出现任何性能问题,我会在以后重新考虑。是的,在向量开头插入数据效率很低。改为使用
std::deque
。将数据插入向量开头不是效率很低吗?可以使用vector::reserve()分配向量中的内存,然后将数据复制到其中。最后,这取决于数据是如何生成的。你可以从一开始就把它们放在向量中。我想我会试试这个。希望不会出现任何性能问题,我会在以后重新考虑。是的,在向量开头插入数据效率很低。改用
std::deque
。我想这是可行的,但最好将所有数据作为一个连续的字节数组(如vector)来获取。事实上,在我的例子中,“二进制数据”由大量的1、2和4字节字段组成,打包在一起进行传输。上述情况并不适用于。。。例如,图像。:)我使用的是一个向量,也许性能不会受到影响。我想这会起作用,但最好将所有数据作为一个连续字节数组(如向量)来获取。实际上,在我的例子中,“二进制数据”由大量的1、2和4字节字段组成,打包在一起用于传输。上述情况并不适用于。。。例如,图像。:)我将使用向量,也许性能不会受到影响。