剪贴板与文件
在已配对的设备之间可以搬两样东西:文本,和文件。它们是同一套机制承载不同的载荷,而真正有区别的地方在于各自 如何结束。
文本
文本小到一定程度时是内联发送的,超出时则作为一次传输。阈值由内核决定,而一次很长的粘贴越过它,不是你需要在 意的事。
为什么文本不总是内联
内联消息装在一个信封里,也就必须装进一个帧。2 MB 的粘贴装不下,而试图装下的内核,要么拒绝它,要么 为一件其实是个文件的东西一直占着帧缓冲区。
文件
文件传输可以续传。每个到达的块都会被记录,所以被打断的传输从它停下的地方继续,而不是从头再来。
| 步骤 | 发生什么 |
|---|---|
| 报盘 | 发送方说明这是什么、多大、以及它的摘要 |
| 分块 | 文件分块到达,每块落地即被记录 |
| 校验 | 收到的字节与声明的摘要做比对 |
| 收尾 | 文件被移到最终位置,到这一步它才出现 |
摘要在字节发出之前就已声明
这正是让"不符"有意义的原因:它说明到达的东西不是承诺的那个,而不是"传输途中有什么变了"。校验失败的文件会被 丢弃而不是留着,重试从头开始。
文件在完整时才出现
不是边收边出现。一个用了最终名字、却只写了一半的文件,是用户能打开的文件 —— 而打开它的那个应用,没有任何办 法知道它来早了。
暂停与续传
中断的传输 —— 设备睡了、网络变了、你合上了盖子 —— 不算失败。它会等,并在链路回来时继续,只要总时间预算还没 用完。
被取消的传输不会续传。
收到的文件去哪
去你选的文件夹,或默认的下载位置。内核负责写入,而接收端决定它落在哪里。
剪贴板同步
当某个插件分享剪贴板时,到达的是一个普通事件,文本就在里面。不存在自动的剪贴板镜像:由插件决定把它变成一条通 知、一次粘贴,还是什么都不做。
剪贴板同步是插件的决定,不是一项设置
内核只负责搬运文本;它是否落进你的剪贴板,取决于你装了什么。这是刻意的 —— 一个会往你剪贴板里粘贴的内核,也 就是能把密码放进去的内核。