HttpURLConnection VS HttpClient性能测试

本文通过一个简单的测试案例,对比了Java标准库中的HttpURLConnection与Jakarta Commons HttpClient在访问速度上的表现。结果显示,对于简单的HTTP请求,HttpURLConnection比HttpClient更快。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本: HttpURLConnection  jdk1.6;HttpClient 3.0.1

在项目中有一个特别小的相关应用,在选择时做了一下测试,之前先对两个类进行下说明:

HttpURLConnection  java的标准类(java.net)

HttpClient Jakarta Commons HttpClient,提供对HTTP协议访问的封装,包括http的请求头,参数,内容体,响应等及多线程的应用。

 

测试代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

public class HttpClientTest {

	private static String link = "http://www.baidu.com";

	public static void main(String[] args) {
		long a = System.currentTimeMillis();
		useHttpURlConnection();
		long b = System.currentTimeMillis();
		System.out.println("use httpurlconnection: "+(b-a));
		long c = System.currentTimeMillis();
		useHttpClient();
		long d = System.currentTimeMillis();
		System.out.println("use httpclient: "+(d-c));
	}
	
	public static void useHttpURlConnection(){
		HttpURLConnection conn = null;
		URL url = null;
		String result = "";
		try {
			url = new java.net.URL(link);
			conn = (HttpURLConnection) url.openConnection();
			conn.setConnectTimeout(10000);
			conn.connect();

			InputStream urlStream = conn.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(urlStream));
			String s = "";
			while ((s = reader.readLine()) != null) {
				result += s;
			}
			System.out.println(result);
			reader.close();
			urlStream.close();
			conn.disconnect();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch(Exception e){
			e.printStackTrace();
		}
	}

	public static void useHttpClient(){
		HttpClient client = new HttpClient();
		GetMethod method = new GetMethod(link);
		method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
				new DefaultHttpMethodRetryHandler(3, false));
		try {
			int statusCode = client.executeMethod(method);

			if (statusCode != HttpStatus.SC_OK) {
				System.err.println("Method failed: " + method.getStatusLine());
			}
			byte[] responseBody = method.getResponseBody();
			System.out.println(new String(responseBody));
		} catch (HttpException e) {
			System.err.println("Fatal protocol violation: " + e.getMessage());
			e.printStackTrace();
		} catch (IOException e) {
			System.err.println("Fatal transport error: " + e.getMessage());
			e.printStackTrace();
		} finally {
			method.releaseConnection();
		}
	}
}

 

测试结果:

use httpurlconnection: 47

use httpclient: 641

 

结果很明显示,但是在实际应用中,还是应该根据实际的需求进行取舍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值