一站式学习Java网络编程-学习手记
Posted 爱上口袋的天空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一站式学习Java网络编程-学习手记相关的知识,希望对你有一定的参考价值。
1. java.io下的字符流和字节流
1.1 字符流
字符流更加的方便我们使用,一般字符都是由多个字节来形成的,若我们使用字节流传输,则还需要我们自己将其转换为字符,若我们直接使用字符流的话,这样就能直接读取与输出字符。
CharArrayReader:是基础的字符输入流,能从字符数组中读取数据
StringReader:从字符串输入流中读取数据
输出流同理
1.1.1 更高级的字符流
BufferedReader:附带缓存区的字符输入流,但是我们并不能直接实例化供我们使用,而是将我们已经创建的Reader字符流,传入进来,就像对它升级一样,多了更多的功能,比如该字符流就是提供了缓存区,这样加快了io的效率,不必重复读取原始数据源
FilterReader:同样也是运用了装饰模式,它额外的功能能对字符流中的字符进行筛选等
InputStreamReader:连接字节流与字符流的一个桥梁,将字节流转化为字符流,比较常用的就是FileReader
1.2 字节流
ByteArrayInputStream:字节数组输入流,从字节数组中获取数据
FileInputStream:文件输入流,从文件中获取数据
输出流同理
1.2.1 更高级的字节流
BufferedInputStream:附带缓存区的字节输入流,它同样也是与BufferedReader一个原理,也需要传入进本的InputStream进行升级
DataInputStream与DataOutputStream:这俩就比较有意思了,相辅相成,与java内置的基本数据类型相关,能够将其中的字节,利用一些方法,比如toLong或toInt等方法直接转换为java的基本数据类型
2. 装饰器模式
我们刚刚看到的,在字符流中BufferedReader、InputStreamReader和FilterReader,字节流中的BufferedInputStream、DataInputStreamReader与DataOutputStream都运用到了装饰器模式,因为它们本身不能进行实例化,都需要传入基本的Reader或InputStream来进行升级,这里便体现的是装饰器模式。
3. Socket
我们可以将Socket认为是网络传输的端点,它也是一种数据源,将特定的ip地址与端口号与其进行绑定,这样它就能够实现通信的功能,如下图中,服务器中的socket绑定了对应的ip与端口号,与客户端间进行通信
3.1 通过Socket发送数据
1、创建Socket,绑定特定的ip地址与端口号
2、将Socket与网卡驱动程序绑定
3、通过Socket我们就能够发送数据了
4、网卡驱动程序对Socket数据进行读取
3.2 通过Socket读取数据
与发送数据类似,只不过是将这个过程反过来了
我们还是要先创建Socket
将Socket与网卡驱动程序进行绑定
Socket接收来自网卡驱动程序的数据
从Socket中读取数据
4. 同步异步与阻塞非阻塞的概念
它们有两两组合的四种不同的排列组合,同步与异步强调通信机制,通俗点儿说可以是关于反应者的概念;阻塞与非阻塞强调调用状态,我们可以将其理解为调用者或者请求发起者
4.1 同步(女孩)
男孩向女孩表白,女孩立即对该事件进行思考、反应,这就是同步通信机制
4.2 异步(女孩)
异步通信机制就是,女孩不会对男孩的请求立即响应,而是女孩先去考虑考虑,有结果了呢,我发短信给你
4.3 阻塞(男孩)
男孩是个瓜皮,自动对女孩表白了以后,茶不思饭不想,一直等待着女孩的回应,不做其他的事情
4.4 非阻塞(男孩)
这种男生就比较厉害了,能够协调好生活和爱情,和女孩表白后,不对结果困惑,而是该干啥还去干啥,这就是非阻塞调用
4.5 四种排列组合
同步阻塞
男孩表白后,女孩立即进行思考给出反应,男孩在该过程中傻等,不干别的
异步阻塞
男孩表白后,女孩溜了,回家去想怎么回应了,不立即思考,男孩傻等,不干别的
同步非阻塞
男孩表白后,男孩干别的去了,不等你回复,而女孩立即陷入了沉思,想着反应结果
异步非阻塞
两个人都比较想得开,男孩表白完,干别的去了,女孩也不立即考虑这件事情,等啥时候考虑好了,再发消息给男孩
5. 网络通信中的线程池
我们在处理高并发请求的时候,若采用如下方法,将会造成很大的资源浪费
线程池的使用是为了避免这种情况,节省系统的资源
5.1 java提供的线程池
我们可以利用Runnable与Callable来创建任务,利用线程池中的线程去执行任务,最后获得结果
5.2 java创建线程池的静态方法
newSingleThreadExecutor:这个线程池中只有一个线程,我们对这一个线程进行不断的复用
newFixedThreadPool:固定线程数量的线程池,当超过线程容量的时候,要进行等待
newCachedThreadPool:这个线程池对多出的任务,还会创建出新的线程去对其进行执行
newScheduledThreadPool:能够实现定时处理任务的线程池
以上是关于一站式学习Java网络编程-学习手记的主要内容,如果未能解决你的问题,请参考以下文章