我有一个下载的任务&在Android(Java平台)中使用HTTP协议上传文件。
我使用以下代码上传文件:
HttpURLConnection httpURLConnection = (HttpURLConnection) serverUrl.openConnection();
....
httpURLConnection.connect();
OutputStream os = httpURLConnection.getOutputStream();
使用以下代码下载文件:
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
...
urlConnection.connect();
DataInputStream stream = new DataInputStream(urlConnection.getInputStream());
根据我的观察,两种情况的connect()都需要时间,因为此时它正在与网络通信。对于文件上传,getOutputStream()会非常快地执行,这是否意味着它没有与网络通信?
而getInputStream()(在文件下载中)需要一些时间(大约200到2500毫秒)才能执行。这是否意味着它正在与网络通信?如果是,那为什么呢?
专家,请提供您对此的评论&如果我在任何地方都错了,请纠正我。
答案 0 :(得分:1)
HTTP是请求/响应协议。您需要TCP连接。 connect()方法创建了它。然后你需要发送一个请求。你为此调用getOutputStream(),然后编写它。
此时没有任何内容被写入网络(在正常传输模式下),因为必须设置内容长度标题,并且Java在您完成写入时不知道。因此,当您调用getInputStream()(或getResponseCode())时,Java会设置内容长度标头,写入请求,等待服务器开始生成响应,读取所有响应标头,然后为您提供输入流在回应的主体的开头。所有这些步骤都需要时间。