public interface MultiDoc
界面MultiDoc提供了类似于docs的“链接列表”的抽象。 多点对象就像链表中的一个节点,包含列表中的当前文档和列表中下一个节点(多点)的指针。 打印作业可以调用多点的getDoc()
方法来获取当前的文档。 当准备继续下一个文档时,打印作业可以调用多点的next()
方法来获取下一个多点,其中包含下一个文档。 所以打印访问多窗口的作业代码可能如下所示:
void processMultiDoc(MultiDoc theMultiDoc) {
MultiDoc current = theMultiDoc;
while (current != null) {
processDoc (current.getDoc());
current = current.next();
}
}
当然,MultiDoc接口可以以任何方式实现合同; 它不必在实现中使用链表。
要获取多点打印作业的所有打印数据,打印服务代理可以使用以下两种模式之一:
为了解决这个问题,并且为了简化向打印作业提供多个文档的客户端的设计,需要使用交叉模式访问支持多点打印作业的每个打印服务代理来访问MultiDoc对象。 也就是说,给定一个MultiDoc对象,打印服务代理将一次或多次调用getDoc()
,直到它成功获取当前的Doc对象。 然后,打印服务代理将获得当前文档的打印数据,直到获得所有打印数据或发生不可恢复的错误为止。 如果能够继续,则打印服务代理将一次或多次调用next()
,直到它成功获取下一个MultiDoc对象或没有更多的指示。 接口MultiDoc的实现可以假设打印服务代理将遵循该交织模式; 对于任何其他使用模式,MultiDoc实现的行为是未指定的。
对可能同时访问同一个多点的客户端线程的数量没有限制。 因此,接口MultiDoc的所有实现必须设计为多线程安全。 实际上,一个客户端线程可能会在(概念)列表的末尾添加文档,而打印作业线程同时从列表的开头获取文档; 如果多点对象正确同步线程,则两个线程将不会相互干扰
Doc getDoc() throws IOException
IOException
- 读取文档时发生错误时抛出。
MultiDoc next() throws IOException
IOException
- 如果找到下一个文档发生错误,则抛出