#include #include #include #include #include class BufferedReader { public: explicit BufferedReader(PackageStream* stream) { buf = new char[stream->PackageLen()]; int32_t tmp = stream->ReadPackage(buf); while (tmp != 0) { for (int32_t i = 0; i < tmp; i++) { s += buf[i]; } tmp = stream->ReadPackage(buf); } delete[] buf; } int32_t Read(char* output_buffer, int32_t buffer_len) { int32_t len; if (pos > (int32_t)s.size()) { return 0; } if (((int32_t)s.size() - pos) >= buffer_len) { len = buffer_len; } else { len = s.size() - pos; } int32_t j = 0; for (int32_t i = pos; i < pos + len; i++) { output_buffer[j] = s[i]; j++; } pos += len; return len; } private: char* buf; string s = ""; int32_t pos = 0; };