
当前JavaEE初阶的阶段知识总结
文件系统操作 ~~ File类.
文件内容操作 ~~ 读文件,写文件.
IO 流对象.
流(Stream),形象的比喻,读取文件,就像水流一样,读写文件的时候,和水流类似,读100字节,可以一次读1个字节,100次完成;也可以一次读10个字节,10次完成……
在Java标准库中,提供了一组类,负责完成IO流式操作.
字节流: 以字节为基本单位
字符流: 以字符为基本单位
上述这四个类,实际上,标准库还提供了很多具体的类的实现,虽然这里涉及到的类非常多,但是实际上大家的使用方法,都是差不多的.
四个核心操作:
打开文件 ~~ 构造流对象的时候,指定文件路径(绝对路径,相对路径)
读文件 ~~ read 参数是一个输出型参数
写文件 ~~ write
关闭文件 ~~ close
每次打开一个文件,都需要在进程对应内核PCB数据结构中, 申请一个文件描述符的表项,文件描述符表是有上限的.如果光打开,不关闭,此时就可能导致文件描述符被占满了,导致无法继续打开文件,所以一定关闭close文件.
网络编程&网络原理
协议
网络中的基本概念 ~~ 协议: 针对数据格式的约定.
网络编程
Socket (网络编程套接字) ~~ 注: UDP,TCP都是传输层协议.
TCP,有连接,可靠传输,面向字节流,全双工.
UDP,无连接,不可靠传输,面向数据报,全双工.
UDP 的 socket
DatagramSocket , 代表一个 socket 对象,本质上一个文件,相当于网卡的抽象.
send 发送, receive 接受, close 关闭文件.
DatagramPacket , 代表一个 UDP 数据报.
构造对象,指定字节数组作为缓冲区.
TCP 的 socket
ServerSocket 专门给服务器用的.
提供的最核心方法 accept 用来接收一个连接.
Socket 服务器客户端都会用到.
客户端使用 Socket 和服务器建立连接,并且进行后续传输.
服务器使用 Socket 和客户端进行交互.
Socket 提供了getInputStream,getOutputStream获取到输入输出流,并进一步通过这些流对象来完成数据传输.
编写TCP的客户端服务器程序的时候,涉及到“长连接”“短连接”的问题.
短连接: 传输一次就断开连接,后续传输,重新连接.
长连接: 一个连接中,多次数据传输.
注: UDP是无连接的,不涉及长连接,短连接的问题.
TCP服务器如果不使用多线程,可能会无法处理多个客户端.
这个事情本质上是和代码结构有关系的,accept会阻塞,read也会阻塞…….这两个地方都可能阻塞,就导致一方阻塞之后,另一方即使数据传来了也无法处理(单线程),使用多线程就是为了规避多处阻塞的问题.
注: 对UDP来说,只有receive一处阻塞,不涉及这个问题.
服务器程序典型流程
客户端典型流程
网络原理
应用层 ~~ 应用层描述了应用程序如何理解和使用网络中的通信数据.
程序猿在应用层这里,最主要的工作就是自定义协议.
下四层都是在系统内核/程序驱动/硬件中已经实现好的,我们只能去了解,不能修改,应用层协议,则是我们可以自定义的.
自定义协议主要做两件事:
明确协议数据要传递哪些信息(根据需求来的).
明确数据组织格式.
比如可以按照纯文本的方式,也可以使用XML,json,protobuffer
最典型的HTTP协议 ~~ 应用层除了上述自定义的协议之外,也有一些大佬们已经设计好的,现成的协议.
传输层
传输层虽然是操作系统内核已经实现好的,但是程序猿写代码,要调用系统提供的socket api完成网络编程.socket 就是属于传输层的部分.
UDP协议
学习一个协议,其中很大的工作就是理解报头解构
一个UDP报文 = UDP 报头 + UDP 载荷
UDP 报头: 8个字节,4个字段.
(1).2字节的源端口 ~~ 发送方的端口
(2).2字节的目的端口 ~~ 接受方的端口
(3).2字节的UDP报文长度 ~~ 2字节表示的范围,就是0 -> 65535,即一个UDP数据报,最长也就是65535字节.
(4).2字节的校验和 ~~ 发送方,把要发送的数据计算出检验和,得到checksum1.接收方,收到数据就把数据按照同样的方式再算一次校验和,得到checksum2.同时接收方也收到了checksum1.接收方对比checksum1和checksum2是否相同,如果相同,说明数据传输没出错.如果不同,说明数据传输变化了.
TCP协议
- 有连接
- 可靠传输 ~~ TCP最核心的特点
- 面向字节流
- 全双工
构成可靠传输的基石(主要机制)
连接(Connect)管理