#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 (data_.length() < (size_t) buffer_len) { int temp = stream_->ReadPackage(chararray); for (int i = 0; i < temp; i++) { data_ += chararray[i]; } if (temp < len) { break; } } int length_buf = std::min(buffer_len, data_.length()); for (int i = 0; i < length_buf; ++i) { output_buffer[i] = data_[i]; } data_.erase(data_.begin(), data_.begin() + length_buf); return length_buf; } private: PackageStream* stream_; std::string data_; };