#include #include #include class BufferedReader { private: PackageStream *stream_; std::string data; int32_t pos = 0; public: explicit BufferedReader(PackageStream *stream) : stream_(stream) { int32_t len; do { std::unique_ptr str(new char[stream->PackageLen()]); len = stream->ReadPackage(str.get()); for (int i = 0; i < len; i++) { data += str[i]; } } while (len > 0); } int32_t Read(char *output_buffer, int32_t buffer_len) { int len1 = buffer_len, len2 = data.size() - pos; int32_t len = std::min(len1, len2); memcpy(output_buffer, data.c_str() + pos, len); pos += len; return len; } };