class BufferedReader { public: explicit BufferedReader(PackageStream* stream) { stream_ = stream; tempStr = new char(stream_->PackageLen()); tempStrSize = stream_->ReadPackage(tempStr); } int32_t Read(char* output_buffer, int32_t buffer_len) { int32_t minSize; if (buffer_len < tempStrSize - lastIndex + 1) minSize = buffer_len; else minSize = tempStrSize - lastIndex + 1; for (int i = 0; i < minSize; ++lastIndex, ++i) { output_buffer[i] = tempStr[lastIndex]; } return minSize; } private: char* tempStr; int32_t tempStrSize; int32_t lastIndex = 0; PackageStream* stream_; };