这个功能似乎非常强大,兼容各种类型的数据,那么它的实现机制是怎样的呢?
操作系统中会有一块地方,称作剪贴板(clipboard),专门用来处理复制粘贴。
不同系统的细节可能会不同,但大致上是这样的:
复制文本时,会把所复制的文本克隆一份到剪贴板里面。粘贴文本时,再将剪贴板里的文本克隆到所粘贴应用程序之中;
复制文本时会保留其样式(比如在 Office 软件中复制,也会存储字体、字号等等信息,复制到剪贴板的实质上是一种「标记语言」)。但粘贴时若应用程序(比如记事本)不支持这些样式,则会去掉样式;
复制图片、混合富文本时,也是同样先克隆到剪贴板里。
复制文件时,系统只会把文件的路径复制到剪贴板,等到粘贴时再分情况处理:
同一分区下,粘贴(或剪切)文件,都不会真正在存储设备里直接克隆、挪动,而是更改此文件的路径(path)属性。当然这与不同文件系统的具体实现有关;
(这也就是为什么,「复制 删除复制源文件 粘贴」这个操作会在大部分系统中失效了)
不同分区下,粘贴(或剪切)文件,会重新开辟空间,然后克隆文件;
涉及到与其他设备(即插即用设备等)之间的复制粘贴则更加复杂,实现各有不同。
还要考虑的情况,就是涉及虚拟机、远程主机的复制粘贴机制。虚拟机软件、远程主机软件都会有一个「介于两系统之间的」剪贴板,「连接起」这两个系统的各自剪贴板,并做一些编码格式转换的工作。
领取专属 10元无门槛券
私享最新 技术干货