首页 > 代码库 > [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~