高效二进制流

Efficient Binary Streaming

本文关键字:二进制 高效      更新时间:2023-10-16

我希望将16位整数块流式传输到程序中。(可以来自文件或标准输入,无论如何。)为了尽可能简洁,我的起始点计算输入到程序中的八位字节:

#include <cassert>
#include <cstdint>
#include <iostream>
int main() {
    int16_t samples[768];
    while (std::cin.good()) {
        std::cin.read(reinterpret_cast<char *>(samples), sizeof(samples));
        if (std::cin.gcount() == sizeof(samples)) {
            // ...
        }
    }
    assert(std::cin.eof());
    return 0;
}

虽然这工作,我想确保我没有错过一些更多的c++方法来执行相同的功能。(创建std::vector并直接读入其内存空间?)这应该是有效的,所以我认为一次读取一个16位整数并附加到一个向量将是不可能的。

想法吗?

所写的代码应该读取一个16位值的数组。唯一的问题是,它假设写入文件时使用的字节顺序与读取文件时使用的字节顺序相同。从这个问题来看,情况是否如此还不清楚。在文件交换的情况下,例如在x86和Sparc机器之间,您通常选择网络字节顺序并在读取时使用ntohs()处理值(在写入时使用htons())。虽然这些看起来像函数,但它们通常只是宏,在使用网络字节顺序的平台上对值不做任何事情。