我知道一种从流中读取并使用它的方法,如下所示:
strstream s; // It can be another standard stream type
// ...
while (!s.eof())
{
char buf[MAX];
s.read(buf, sizeof (buf));
int count = s.gcount();
THIRD_PARTY_FUNCTION(buf, count);
// ...
}
但是这段代码有一个滥用点,它首先将数据从流复制到buf
,然后传递buf
到THIRD_PARTY_FUNCTION
。
有什么方法可以将代码改写为如下所示(我的意思是下面的代码避免了额外的副本)?
strstream s; // It can be another standard stream type
// ...
while (!s.eof())
{
char *buf = A_POINTER_TO_DATA_OF_STREAM(s);
int count = AVAIABLE_DATA_SIZE_OF_STREAM(s);
// Maybe it needs s.seekg(...) here
THIRD_PARTY_FUNCTION(buf, count);
// ...
}