首页 > 代码库 > [Android] Volley源码分析(五)答疑
[Android] Volley源码分析(五)答疑
Volley源码分析系列出了有一段日子了,有不少看官私底下给我留言,同时抛出了一些问题。对于一些比较简单的问题我们跳过去,这两天接到网友是@smali提出的问题。不得不赞一下这位看官看源码时候的细腻程度,我引出这个问题供大家一块思考一下。
Q:在写入文件头数据的时候为何不直接写入Int而是通过移位的方式来完成?
我们来看一下对应的源码:
writeInt(os, CACHE_MAGIC); static void writeInt(OutputStream os, int n) throws IOException { os.write((n >> 0) & 0xff); os.write((n >> 8) & 0xff); os.write((n >> 16) & 0xff); os.write((n >> 24) & 0xff); }
首先我们知道Output流本身提供write(Int)的方法为何要再通过移位呢?
A:我们知道,实际上对于一个流来说,它能直接操纵的数据是一个byte。这个问题的根源在于对OutputStream提供的write(Int)的误解。实际上对于OutputStream来说,当你传入一个int的时候,它会将这个Int截断,取得低端的byte长度的数据写入流当中。也就是说对于0xffffff00这些位上的数据会丢失。所以只能通过移位的方式来写入,或者是你计算好4个byte的数组,然后写入到你的流中。
thx~
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。