#include #include class BufferedReader { public: explicit BufferedReader(PackageStream* stream) { streamSize = stream->PackageLen(); buffer = new char[streamSize]; int cursize = 0; while (true) { cursize = stream->ReadPackage(buffer); if (cursize > 0) { for (int32_t i = 0; i < cursize; i++) { text += buffer[i]; } } if (cursize <= 0) { break; } } delete[] buffer; } int32_t Read(char* output_buffer, int32_t buffer_len) { int32_t a = min((int32_t)(text.size()), pos_ + buffer_len); int32_t next_pos = a; int32_t len = next_pos - pos_; memcpy(output_buffer, text.c_str() + pos_, len); pos_ = next_pos; return len; } private: char* buffer; int32_t streamSize; string text; int32_t pos_ = 0; };