Java网络编程 - 02 的基本网络支持

导读目录
  • InetAddress类
  • URLDecoder和URLEncoder

Java为网络支持提供了java.net包,该包下的URLURLConnection等类提供了以编程方式访问Web服务的功能,而URLDecoder和URLEncoder则提供了普通字符串和application/x-www-form-urlencoder MIME字符串相互转换

1.InetAddress类

InetAddress类是Java包装用来表示IP地址的高级表示。几乎所有的Java网络相关的类都和它有关系,例如:serversocket,socket,URL,DataGramSocket,DataGRamPacket等

它代表IP地址,没有构造器,提供了静态方法类获取实例
static InetAddress getByAddress(byte[] addr);//根据原始的IP地址来获取对应的InetAddresss实例
static InetAddress getByName(String host); //根据主机名获取对应的InetAddress
static InetAddress getByAddress(String host, byte[] addr);

InetAddress提供了如下的方法来获取其实例中封装的IP地址和主机名:
String getCanonicalHostName(); //获取此IP地址的全限定域名,即计算计的全名
String getHostAddress(); //返回该实例对应的IP地址的字符串
String getHostName();//返回此IP地址的主机名

static InetAddress getLocalHost(); //返回本机IP地址对应InetAddress实例

boolean isReachable(int timeout); //测试某一个InetAddress对应的主机是否可达, timeout参数是最长的测试时间

2.URLDecoder和URLEncoder

URLDecoder和URLEncoder用于完成普通字符串和application/x-www-form-urlencoded MIME字符串之间的相互转换

URLDecoder
static String decode(String s, String enc); //将MIME字符串转换为普通字符串(我们能看懂的), enc受支持字符编码的名称

URLEncoder
static String encode(String s, String enc); //将普通字符串(我们能看懂的)转换为MIME字符串

3.URL、URLConnection、URLPermission(Java8新增的)

URL(Uniform Resource Locator)对象代表同一资源定位器,它包含一个可打开到达特定资源的输入流。可将URL理解为URI的特例。
URL地址:protocol://host:port/resourceName
URI(Uniform Resource Identifiers)对象代表一个统一资源标识符,它不能定位任何资源,其唯一作用就是解析,

(1)URL

URL提供多个构造器,
URL(String spec); //根据资源文件的路径(可以是网络路径、计算计上的文件路径)

提供的方法:
String getFile();
String getHost();
String getPath();
int getPort();
String getProtocol();
String getQuery();//返回该URL的查询字符串部分

URLConnection openConnection(); //返回一个URLConnection对象,代表与URL所引用的远程对象的连接
InputStream openStream(); //打开与此URL的连接,并返回一个可用于读取该URL资源的InputStream

(2)URLConnection
URLConnection
    |
    HttpURLConnection
    JarURLConnection 

抽象类URLConnection是所有类别代表和一个URL的应用程序之间的通信链路的父类。这个类的实例可以用于读取和写入URL引用的资源。一般来说,创建连接到URL是一个多步骤的过程:
(1)通过URL对象的openConnection()方法来创建URLConnection对象
(2)设置URLConnection的参数和普通请求属性
(3)如果只是发送GET请求,则使用connect()方法建立和远程资源之间的实际连接即可,
如果是发送POST请求,则需要获取URLConnection实例对应的输出流(通过getOutputStream()来获取)来发送请求参数
(4)远程资源变为可用,程序可以访问远程资源的头字段或通过输入流(通过getInputStream()来获取)读取远程资源的数据

建立和远程资源之间的实际连接之前,程序可以通过如下方法来设置请求头字段:
void setAllowUserInteraction(boolean allowuserinteraction);//设置该URLCOnnection的allowUserInteraction请求头字段的值
void setDoInput(boolean doinput);//设置该URLCOnnection的doInput请求头字段的值
void setDoOutput(boolean dooutput);//设置该URLCOnnection的doOutput请求头字段的值
void setIfModifiedSince(long ifmodifiedsince);//设置该URLCOnnection的ifModifiedSince字段的值
void setUseCaches(boolean usecaches);//设置该URLCOnnection的useCaches请求头字段的值
abstract void connect();//如果此连接尚未建立,则打开此url引用的资源的通信链路

void setRequestProperty(String key, String value);//设置通用头字段,如"accept", "/"
void addRequestProperty(String key, String value); //该URLCOnnection的key请求头字段增加为value值,该方法不会覆盖原请求头字段的值,而是将新值追加到原请求头字段中

InputStream getInputStream();//获取该URLConnection对应的输入流,用于获取URLConnection响应的内容
OutputStream getOutputStream();////获取该URLConnection对应的输出流,用于向URLConnection发送请求参数

注意:如要既要使用输入流读取URLConnection相应的内容,又要使用输出流发送请求参数,则一定要先使用输出流,在使用输入流

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 前言 多年以前自学Java,在本地做了一些笔记。最近几年流行播客,一方面防止丢失,一方面可以帮助其他小伙伴...
    chaohx阅读 1,031评论 0 3
  • 经验:1.在网络端接收数据后写入本地时要用write(byte[],0,len),不要用write(byte[])...
    123yuan123阅读 373评论 0 2
  • 老师我目前未婚,是银行文员,地处陕西延安。想知道未来事业如何,家庭事业怎么样? 生肖马坤造:庚午,戊寅,癸丑,乙卯...
    陈语轩国学大讲堂阅读 765评论 0 1
  • 我国传统的清明节大约始于周代,已有二千五百多年的历史。清明最开始是一个很重要的节气,清明一到,气温升高,正是春...
    闫杰阅读 288评论 0 0