分享

徐葳【2019版最新】40小时掌握Java语言之09网络编程+正则表达式

 大数据徐葳 2019-03-30

1章:网络编程

1.1网络编程简介

之前我们写的程序都是在本地自己玩,现在我想通过网络把我的数据发给你,你再给我回传过来,这就是网络编程。也就是网络之间的通信。

如果我们进行网络编程,数据传输,那么都需要什么要素呢?假设我要给你说话,我要先找到你,你是不是还要有一个接收数据的地方啊,也就是说你要接受我说的话,正常都是通过耳朵,聋人就不行了,那我给你说话,是不是还有按照一定的协议啊,要是我给你说韩文,说法语,你是不听不懂啊,所以还要有传输规则。

这就是网络通讯的三要素,IP地址+端口号+传输协议

下面来详细分析一下这三要素。

1.2 IP地址

首先看IP地址

Ip地址现在大部分都是由四位组成的(IPV4),每位最大值是255 不过现在IPV6也开始应用了。

每台计算机在没有联网之前,都有一个默认地址值,127.0.0.1

但是这个IP不好记忆,就会给计算机起个名字,,默认情况下使用localhost作为主机名

主机名的出现是为了方便记忆ip地址的。

针对这个IP地址,java有做了封装,在java.net包中有InetAddress

InetAddress没有构造函数,不能new,但是有静态方法,可以直接用。

获取ip对象,通过getLocalHost方法,获取到ip对象以后就可以获取ip地址和

主机名了。代码如图1.1所示。

1.1 获取iphostname

1.3 端口号

两个主机上的QQ和飞秋进行通信,第一台给第二台发消息,把数据发送过去了,但是,数据发送过去之后,具体后面的主机的哪个程序会解析对应的数据呢,这样就没法确定了,所以就给每个应用程序起了一个名字,8000 9000,这个就叫端口号。

每个应用程序都至少有一个端口号。

端口号

用于标识进程的逻辑地址,不同进程的标识

有效端口:0~65535,其中0~1024系统使用或保留端口。

如果我使用了2425端口,飞秋这个软件就不能再使用这个端口了。

1.4 传输协议

现在咱们能找到对方主机了,对应应用程序也能解析了

两台机器想要具备数据传输的话,必须还要具备另外一个规则,也就是说两个人要说同一种语言。

通讯规则有TCP UDP

下面分析下这两个协议

UDP

将数据及源和目的封装成数据包中,不需要建立连接

每个数据包的大小在限制在64k

因无连接,是不可靠协议

不需要建立连接,速度快

UDP就像是在邮局邮递包裹。只管发送,不管对方能不能收到。

TCP

建立连接,形成传输数据的通道。

在连接中进行大数据量传输

通过三次握手完成连接,是可靠协议

必须建立连接,效率会稍低

TCP就像是打电话,必须接通之后才能说话。

一般计算机都支持UDPTCP协议。

2章:正则表达式

2.1 正则表达式概述

一个需求:校验QQ

实现这个需求需要写很多代码,如图2.1所示。

2.1 普通java代码校验QQ

这种太麻烦了,我们再写一种功能

String类中找一个方法matches。先写一个例子,如图2.2所示。

2.2 正则代码

下面我们就看一下刚才在reg变量中写的那一串字符串到底是什么含义

其实我们刚才在reg变量里面写的就是正则表达式

正则表达式:其实是一种规则,有自己特殊的应用。主要针对字符串进行操作。

正则就是用于操作字符串的规则,其中是以一些符号来表示规则,

你可以理解为:其实符号就是代表了底层的代码,不用再书写代码,而是使用一些符号来表示,简化了书写。

正则可以简化对字符串的复杂操作。

2.2 正则的功能

正则表达式到底都可以实现哪些功能呢?

匹配、切割、替换、获取

下面根据这几个功能一个一个的来学习

2.2.1 匹配

先看里面的匹配功能。代码如图2.3所示。

2.3 正则的匹配应用

查看api中的字符解释,如图2.4所示。

2.4 正则中的字符解释

写个例子,判断手机号是否正确,代码如图2.5所示。

2.5 正则判断手机号

注意,这里面的[0-9]可以使用\d来表示

但是这个\在字符串中是个转义字符,所以在这需要再加一个\进行转义。代码如图2.6所示。

2.6 正则校验手机号

2.2.2 切割功能&正则组

演示下String中的split方法,写一个字符串,中间使用逗号隔开,是没问题的,

如果使用. 点的话,切割就会有问题,因为点在正则中表示是任意字符

这个时候需要对点进行转义。代码如图2.7所示。

2.7 split和正则。

还要注意:字符串中有空格的话可以直接使用空格切开,但是如果有的有多个空格就有问题了,所以可以在空格后面加一个+号。代码如图2.8所示。

2.8 正则应用

对叠数进行切割。代码如图2.9所示。

2.9 正则应用

注意:() 这个小括号在真正则中也称为正则组。

多个组嵌套的话,如何区分优先级,用左括号来区分,从左边开始数,如图2.10所示。

2.10 多个正则组的优先级

2.2.3 替换

String中的replaceAll方法

把字符串中的叠词都替换成#

代码如图2.11所示。

2.11 replaceAll使用正则

2.2.4 获取

看需求:

想要获取由3个组成的单词,刚才的功能返回的都是一个结果,只有split返回的是数组,但是它是把规则作为分隔符,不会获取符合规则的内容,这时我们就要用到一些正则对象了,

Pattern类,如图2.12所示。

2.12 API文档介绍

使用Pattern类可以实现规则的编译和内容的提取等功能,代码如图2.13所示。

m.find();//将规则对字符串进行匹配查找

m.group();//在使用group方法之前,必须要先找,找到了才可以取。

2.13 获取数据

3章:Java源码反编译

3.1 Java源码反编译

.java源文件转换成.class文件的过程称为编译

.class文件转换成.java源文件的形式称为反编译

可以使用JD-GUI这个小工具实现反编译

演示一下,如图3.1所示。

File-->Open File  找到对应的class文件,打开即可。

3.1 class反编译

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多