一站式学习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网络编程-学习手记的主要内容,如果未能解决你的问题,请参考以下文章

一站式学习Java网络编程-学习手记

一站式学习Java网络编程-学习手记

一站式学习Java网络编程-学习手记

一站式学习Java网络编程-学习手记

一站式学习Java网络编程

[学习手记] Java中利用DOM方法解析XML文件