通常这是不可能的。
如果要复制输入流或输入迭代器,则有两个选择:
答:将所有内容都保存在集合中,例如 List<>
假设您将一个流复制为两个流,
s1然后将
s2。如果您的
n1元素中包含高级元素,
s1并且
n2元素中包含
s2,则必须将
|n2 -n1|元素保留在内存中,以便跟上步伐。如果流是无限的,则可能没有所需存储空间的上限。
看一下Python
tee(),看看需要什么:
此itertool可能需要大量辅助存储(取决于需要存储多少临时数据)。一般来说,如果一个迭代器使用大部分或全部的数据的另一个前开始迭代器,它是更快地使用
list()代替tee()。
B.尽可能:复制创建元素的生成器的状态
为了使此选项起作用,您可能需要访问流的内部工作方式。换句话说,生成器(创建元素的部分)首先应支持复制。[OP:请参见下个[
好答案 ,作为该问题示例如何完成的示例]
由于您必须复制整个“外部世界”的状态,因此无法根据用户输入进行操作。Java
Stream不支持复制,因为它被设计为尽可能通用。例如,使用文件,网络,键盘,传感器,随机性等。[OP:另一个示例是按需读取温度传感器的流。如果不保存读数的副本,则无法复制它]
这不仅是Java中的情况;这是一个一般规则。您可以看到
std::istream,由于这个原因(以及其他原因),在C
++中仅支持移动语义,不支持复制语义(“复制构造函数(已删除)”)。



