#include #include class BufferedReader { public: explicit BufferedReader(PackageStream* stream): stream_(stream) {} int32_t Read(char* output_buffer, int32_t buffer_len) { int len = stream_->PackageLen(); char* chararray = new char[len]; while (this->data_.length() < (size_t) buffer_len) { int temp = stream_->ReadPackage(chararray); for (int i = 0; i < temp; i++) { this->data_ += chararray[i]; } if (temp < len) { break; } } int res_len = std::min(buffer_len, this->data_.length()); for (int i = 0; i < res_len; ++i) { output_buffer[i] = this->data_[i]; } delete[] chararray; this->data_.erase(this->data_.begin(), this->data_.begin() + res_len); return res_len; } private: PackageStream* stream_; string data_; };