码迷,mamicode.com
首页 > 移动开发 > 详细

[Android] Volley源码分析(五)答疑

时间:2014-08-04 14:25:47      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:android   style   java   os   io   文件   数据   问题   

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~


[Android] Volley源码分析(五)答疑,布布扣,bubuko.com

[Android] Volley源码分析(五)答疑

标签:android   style   java   os   io   文件   数据   问题   

原文地址:http://blog.csdn.net/hello__zero/article/details/38367803

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!