cache在“缓存”的含义诞生之前就存在了,意思是a secret place of storage,也就是“用于存放物品的隐蔽区域”,比如动物贮存食物的地方,或者人类埋藏金币的秘穴。所以用cache来命名计算机中的“缓存”是非常恰当的:cache把数据存储起来加快读取,而且它必须是隐蔽的。我已经见过无数程序员写的不透明缓存了,这种“缓存”必须改动主线业务,使用和维护都异常麻烦,如果程序员多懂一点英文,知道cache原本的意思,问题会少很多吧。
buffer也是这样,它原本的意思是devices or pieces of material for reducing shock or damage due to contact,也就是“用来减少接触时产生的震荡或损坏的装置或材料”,比如为了用于逃生的气垫,或者汽车上用的减震器。用buffer来命名计算机中的“缓冲”也是非常巧妙的:buffer用来解决两种设备在数据交互时的数据丢失(或者阻塞等待)的问题。我读大学的时候,老师特意强调“缓冲是用来解决速度不匹配的问题”,让大家印象深刻。但是如果大家多懂一点英文,知道buffer原本的意思,估计不用老师强调自己也能理解了。
文档里是这么描述serialize的:the object can be flattened into bytes and subsequently inflated in the future。不妨看看flat和serial原本的意思。flatten的意思是“打扁、推倒”,serial的意思是“无间隔的规律摆放”。这样看来,整个描述是非常形象了:“序列化”指的是把对象拆散成一堆紧密码放好的字节(也就是字节数组啦),之后还能组装起来。有很多人纠结serialize到底是“序列化”还是“串行化”,如果你懂得seralize和flatten的真正意思就会知道,“序列化”还是“串行化”都不合适,但是,也无所谓。