class BufferedReader {
 public:
    explicit BufferedReader(PackageStream* stream) {
        stream_ = stream;
    }
    int32_t Read(char* output_buffer, int32_t buffer_len) {
        char* tempStr = new char(stream_->PackageLen());
        int32_t numOfChar = stream_->ReadPackage(tempStr);
        int32_t minSize = numOfChar < buffer_len ? numOfChar : buffer_len;
        for (int i = 0; i < minSize; ++i) {
            output_buffer[i] = tempStr[i];
        }
        delete(tempStr);
        return minSize;
    }
 private:
    PackageStream* stream_;
};