application-x-www-form-urlencoded-还是-multipart-form-data-
主体内容翻译自https://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data 上的最高赞的回答
首先,http请求的内容如下:
request line
headers
request body其中,request line部分的url必须以application/x-www-form-urlencoded方式编码
request body的编码方式由头部的Content-Type指定。
以下,开始翻译stackOverFlow的application
2019-03-03
网络
OkHttp拦截器袖珍重写版
本篇文章建立在看过一遍OkHttp源码中的拦截器部分的基础上。
OkHttp回顾OkHttp的拦截器工作原理如下图,每一个拦截器都有机会处理上一个拦截器传下来的Request或者下一个拦截器返回上来的Response,即可任意地进行前处理和后处理。在最后一个拦截器CallServerInterceptor中进行真正的网络链接,成功后构造Response对象并发布,一层一层地传递到开发者手上。
仿写拦截器
在实战开发中,仅就涉及数据处理这一方面,拦截器就有非常好的设计效果,OkHttp这一套是可以照搬到很多地方的,拦截器这一套设计实战性非常高,故在这里动手撸一个简易版。
1. 定义Re
2019-01-18
第三方库
Message-obtain()中的单链表栈缓存
Message.obtain()中的单链表栈缓存Android中的Message.java用单链表实现了一个size=50的栈,用作缓存。以下结合源码和图分析存取过程。
存void recycleUnchecked() {
// Mark the message as in use while it remains in the recycled object pool.
// Clear out all other details.
flags = FLAG_IN_USE;
what = 0;
arg1 = 0;
arg2 = 0;
o
2019-01-16
Android
Socket、描述符、端口号
Socket、描述符、端口号端口:端口与进程对应:TCP 的包是不包含 IP 地址信息的,那是 IP 层上的事,但是有源端口和目的端口。就是说,端口这一东西,是属于 TCP 知识范畴的。
我们知道两个进程,在计算机内部进行通信,可以有管道、内存共享、信号量、消息队列等方法。而两个进程如果需要进行通讯最基本的一个前提是能够唯一的标识一个进程,在本地进程通讯中我们可以使用 「PID(进程标识符)」 来唯一标识一个进程。但 PID 只在本地唯一,如果把两个进程放到了不同的两台计算机,然后他们要通信的话,PID 就不够用了,这样就需要另外一种手段了。
解决这个问题的方法就是在运输层使用 「协议端口号
2018-12-16
网络
Android文件api获得的路径
InternalStorage/data/user/0等同于/data/data
context.getFilesDir();
//路径:/data/user/0/包名/files
context.getCacheDir();
//路径:/data/user/0/包名/cache
context.getDir("abc",MODE_PRIVATE);
//路径:/data/user/0/包名/app_abc
contexnt.createTmpFile("myTmp",".suffix");
//路径:/data/user/0/包名/
2018-12-02
Android
Gradle构建的生命周期和其对象的理解
文章主题内容来自Gradle官方文档的Understanding the Build Lifecycler章节。通读完该章节,大大加深了我对task对象,project对象,gradle.build脚本和project对象的关系等这3个概念的理解。
官方文档地址:https://docs.gradle.org/current/userguide/build_lifecycle.html#sub:building_the_tree
构建的不同阶段一个gradle的构建有3个不同的阶段
初始化(Initialization)
Gradle支持单和多project的构建。在初始化阶段,gra
2018-11-11
Gradle
ubuntu下配置java,gradle,groovy,androidSdk,androidNdk环境变量
1. 下载到官网下载各自对应的压缩包并解压。注意,如果提前用AndroidStudio下载了gradle,那么可以直接在~/.gradle/wrapper/dists/下找到已经下载了的gradle。
2.配置命令行
用gedit打开profile配置文件$ sudo gedit /etc/profile
拉倒最底部,依次根据自己的下载路径加入如下配置# set java environment
export JAVA_HOME=/home/william/下载/jdk-8u181-linux-x64/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PAT
2018-11-03
操作系统