class BufferedReader { public: explicit BufferedReader(PackageStream* stream) { buf = new char[stream->PackageLen()]; pacStream = stream; } int32_t Read(char* output_buffer, int32_t buffer_len) { int readed = 0, i = 0; while (buffer_len != 0 && iter != rmb) { output_buffer[i++] = this->buf[iter++]; readed++; buffer_len--; } if (buffer_len > 0) { iter = 0; rmb = pacStream->ReadPackage(this->buf); while (buffer_len != 0 && iter != rmb) { output_buffer[i++] = this->buf[iter++]; readed++; buffer_len--; if (iter == pacStream->PackageLen()) { rmb = pacStream->ReadPackage(this->buf); iter = 0; } } } return readed; } private: int iter = 0, rmb = 0; char* buf; PackageStream* pacStream; };