#pragma once
class BufferedReader {
public:
explicit BufferedReader(PackageStream* stream) : stream_(stream) {}
int32_t Read(char* output_buffer, int32_t buffer_len) {
int64_t len = 0;
int64_t dif = 0;
while (len < buffer_len) {
dif = stream_->ReadPackage(output_buffer + len);
if (dif != stream_->PackageLen()) break;
len += dif;
}
return len + dif > buffer_len ? buffer_len : len + dif;
}
private:
PackageStream* stream_;
};