[Android] Volley源代码分析(五岁以下儿童)Q \\ u0026一个
2015-07-14 11:29
411 查看
Volley源代码分析系列那里一段时间,告诉我,有许多私人留言,同时一些问题抛出。对于一些简单的问题,我们跳,这两天被连接到朋友@smali提出的问题。告诉我你不得不赞叹查看源代码时的详细程度,大家一块思考一下。
Q:在写入文件头数据的时候为何不直接写入Int而是通过移位的方式来完毕?
我们来看一下相应的源代码:
首先我们知道Output流本身提供write(Int)的方法为何要再通过移位呢?
A:我们知道,实际上对于一个流来说,它能直接操纵的数据是一个byte。这个问题的根源在于对OutputStream提供的write(Int)的误解。实际上对于OutputStream来说,当你传入一个int的时候,它会将这个Int截断,取得低端的byte长度的数据写入流其中。也就是说对于0xffffff00这些位上的数据会丢失。
所以仅仅能通过移位的方式来写入,或者是你计算好4个byte的数组,然后写入到你的流中。
thx~
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百度公交开发(四)——百度地图API之根据经纬度查询地址信息
- 使用Android Studio遇到的问题及解决过程
- Android百度公交开发(三)——百度地图API之MyLocationOverlay的使用
- Android百度公交开发(二)———百度地图API之ItemizedOverlay的使用
- Android 系统自动重启Bug(高通平台)
- Android百度公交开发(一)——如何在Android应用中使用百度地图api
- Android调用WebService系列之对象构建传递 推荐
- Android实战技巧之三十八:Handler使用中可能引发的内存泄漏
- Android Touch事件的处理流程
- 数据文件保存
- Android开源项目分类汇总
- Android中attr自定义属性详解
- Android 读取Excel文件
- AndroidManifest.xml文件内容详解
- Android -- Volley
- Android studio十大常用快捷键
- 通过web服务器访问MYSQL数据库,使其数据同步到android SQLite数据库
- Android自定义RatingBar
- Android中不同参数的Timer.schedule()方法之间的区别
- Android 插件开发-热补丁解决线上问题