Java远程字节流,URL?

引入

说到网络编程,Socket(套接字)的地位不容小视,他几乎适用于绝大多数网络连接方式。

但他对开发人员的网络协议知识要求也大。

见此:
Java提供了一组URL处理类,封装了Socket编程的实现技术细节

使用URL类进行网络连接,相当于直接进行远程输入输出流操作。

开发人员只需要掌握IO操作即可

不是很全面的总结
关于URL你了解多少,就是那串字符串都代表啥?

URL myURL = null;
try {
    myURL = new URL("http://java.SKY.com/sky.html?language=cn#song");
} catch (MalformedURLException e) {
    e.printStackTrace();
}

String protocol = myURL.getProtocol();//获得网络传输协议
String host = myURL.getHost();//获得主机域名
String file = myURL.getFile();//文件名和请求参数
int port = myURL.getPort();//获取端口号
String ref = myURL.getRef();//获取URL的锚点(定位位置)

System.out.println(protocol + ", " + host + ", " + file + ", " + port + ", " + ref);
System.out.println("默认端口:"+myURL.getDefaultPort());

输出结果

http, java.SKY.com, /sky.html?language=cn, -1, song
默认端口:80

这个例子不是很全,都是常用的,特殊的可以去某鸟教程上看看


接下来借助文件下载的例子熟悉URL使用过程

文件下载

String sUrl = "https://timgsa.baidu.com/timg?" +
        "image&quality=80&size=b9999_10000&sec=1586621985021&di" +
        "=a1502ca00b00fe4b51c7da46bbc54523&imgtype" +
        "=0&src=http%3A%2F%2Fimg1" +
        ".ali213.net%2Fshouyou%2Fupload%2Fimage%2F2019%2F05%2F28%2F584" +
        "_2019052811414489.jpg";
URL url = new URL(sUrl);   // 创建URL对象
//打开链接
URLConnection connection = url.openConnection();
//得到输入流
InputStream inputStream = connection.getInputStream();
//这个过程其实就是一个远程流动操作
OutputStream outputStream = new FileOutputStream("D:\\sky.jpg");

byte[] bytes = new byte[2048];
int length = 0;
length = inputStream.read(bytes,0,bytes.length);
while (length != -1){
    outputStream.write(bytes,0,length);
    length = inputStream.read(bytes,0,bytes.length);
}
inputStream.close();
outputStream.close();

在这里插入图片描述
另一种写法

//图片(文件)的下载
String sUrl = "https://timgsa.baidu.com/timg?" +
        "image&quality=80&size=b9999_10000&sec=1586621985021&di" +
        "=a1502ca00b00fe4b51c7da46bbc54523&imgtype" +
        "=0&src=http%3A%2F%2Fimg1" +
        ".ali213.net%2Fshouyou%2Fupload%2Fimage%2F2019%2F05%2F28%2F584" +
        "_2019052811414489.jpg";
URL url = new URL(sUrl);   // 创建URL对象
InputStream in = url.openStream(); // 获得网络输入流
// 创建文件输出流
FileOutputStream out = new FileOutputStream("D:\\Sky.jpg");
int b;
while ((b = in.read()) != -1) {
    out.write(b);     // 写入文件
}
// 关闭输入输出流
out.close();
in.close();

获取HTTPS的响应信息

获取HTTPS服务器响应的消息头和消息主体

//获取响应信息
URL url = new URL("https://www.baidu.com/");
//获得连接
URLConnection connection =  url.openConnection();
HttpsURLConnection https = (HttpsURLConnection)connection;
//获得响应消息头
System.out.println("获得响应消息头:");
System.out.println(connection.getContentType());
System.out.println(connection.getContentLength());
System.out.println(connection.getContentEncoding());
//获得HTTPS消息状态码
System.out.println("获得HTTPS消息状态码:");
System.out.println(https.getResponseCode());
System.out.println(https.getResponseMessage());
//获得HTTPS响应消息的主体
System.out.println("获得HTTPS响应消息的主体:");
System.out.println(https.getContent());

输出结果
在这里插入图片描述
这里主要想说明一下,

关于Connection,不同协议有专门的对口连接:HTTP—HttpURLConnection;HTTPS—HttpsURLConnection

That’s all,,.Thank you!!

原创文章 10 获赞 10 访问量 437

猜你喜欢

转载自blog.csdn.net/weixin_43415201/article/details/105461644
今日推荐