Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 处理未知大小流的最佳方法_C++_Oop_Stream - Fatal编程技术网

C++ 处理未知大小流的最佳方法

C++ 处理未知大小流的最佳方法,c++,oop,stream,C++,Oop,Stream,有一个未知大小的流(我的类)。流结束时,Read()返回0。没关系。 但是在这种情况下,CopyToEnd()出现了一个概念上的问题。 CopyToEnd()从某个位置读取一些字节计数,并将它们复制到流的末尾。 但是如果它不知道流的大小,它怎么能做到这一点呢? 创建一个虚拟抽象方法SeekToEnd()并在流继承的类中定义它可能是个好主意?或者在知道大小流的子类中移动CopyToEnd()方法更合理?欢迎提出任何想法。我认为,您可以保留在类的“结束后”链接列表中,在该列表中,通过对CopyToE

有一个未知大小的流(我的类)。流结束时,Read()返回0。没关系。 但是在这种情况下,CopyToEnd()出现了一个概念上的问题。 CopyToEnd()从某个位置读取一些字节计数,并将它们复制到流的末尾。 但是如果它不知道流的大小,它怎么能做到这一点呢?
创建一个虚拟抽象方法SeekToEnd()并在流继承的类中定义它可能是个好主意?或者在知道大小流的子类中移动CopyToEnd()方法更合理?欢迎提出任何想法。

我认为,您可以保留在类的“结束后”链接列表中,在该列表中,通过对CopyToEnd()的顺序调用累积值。当您从原始文件到达EOF时,不返回0,只需开始处理保存的列表。列表结束时返回0


这种机制解决了许多“边缘情况”——例如,当您从链接列表(在实际文件结束后)读取块时,同时调用CopyToEnd()。

考虑为您的读取缓冲区使用动态增长算法。或者决定一次要处理多少数据,并在分区中读取。不管怎样,这个问题有点。。。含糊不清。@WhozCraig感谢您的评论。我将重新考虑CopyToEnd()的行为