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_;
};