如何在c++中将缓冲区转换为箭头拼花表



我从远程读取了一个parquet文件,所以获取二进制文件,这是一个缓冲区。(unsigned char *buffer)如何将其转换为可读表?

我可以将缓冲区保存到本地磁盘,例如
std::ofstream outFile;
outFile.open("../test.parquet", std::ios::binary);
for (int i = 0; i < file_size; i++)
{
outFile << buffer[i];
}

然后读取parquet文件来解析它。如何将缓冲区直接转换为可读表?我可以使用arrow::Buffer来存储缓冲区,但不知道如何解析它。

我自己定义了RandomAccessFile

class VectorRandomAccessFile : public arrow::io::RandomAccessFile {
public:
VectorRandomAccessFile(const std::vector<char>& data)
: data_(data), position_(0) {
}
arrow::Result<int64_t> ReadAt(int64_t position, int64_t nbytes, void* out) {
if(nbytes > 0) {
memcpy(out, data_->data() + position, static_cast<size_t>(nbytes));
position_ += nbytes;
}
return nbytes;
}
arrow::Result<std::shared_ptr<arrow::Buffer>> ReadAt(int64_t position,
int64_t nbytes) {
return std::make_shared<arrow::Buffer>((const uint8_t*)data_.data() + position, nbytes);
}
arrow::Result<int64_t> Read(int64_t nbytes, void* out) {
return ReadAt(position_, nbytes, out);
}
arrow::Result<std::shared_ptr<arrow::Buffer>> Read(int64_t nbytes) {
return ReadAt(position_, nbytes);
}
arrow::Result<int64_t> GetSize() override {
return data_.size();
}
arrow::Result<int64_t> Tell() const override {
return position_;
}
arrow::Status Seek(int64_t position) override {
position_ = position;
return arrow::Status::OK();
}
arrow::Status Write(const void* data, int64_t nbytes) {
// Not write
return arrow::Status::OK();
}
arrow::Status Close() {
is_close = true;
return arrow::Status::OK();
}
void read();
bool closed() const override {
return is_close;
}
private:
bool is_close;
const std::vector<char>& data_;
int64_t position_;
};

最新更新