
当前JavaEE初阶的阶段知识总结
-  
多线程
 -  
文件IO
-  
文件系统操作 ~~ File类.
 -  
文件内容操作 ~~ 读文件,写文件.
 -  
IO 流对象.
-  
流(Stream),形象的比喻,读取文件,就像水流一样,读写文件的时候,和水流类似,读100字节,可以一次读1个字节,100次完成;也可以一次读10个字节,10次完成……
 -  
在Java标准库中,提供了一组类,负责完成IO流式操作.
-  
字节流: 以字节为基本单位
- InputStream 输入流,把数据从硬盘,读取到内存中.
 - OutputStream 输出流,把数据从内存写入到硬盘里.
 
 -  
字符流: 以字符为基本单位
- Reader 输入流
 - Writer 输出流
 
 -  
上述这四个类,实际上,标准库还提供了很多具体的类的实现,虽然这里涉及到的类非常多,但是实际上大家的使用方法,都是差不多的.
四个核心操作:
-  
打开文件 ~~ 构造流对象的时候,指定文件路径(绝对路径,相对路径)
 -  
读文件 ~~ read 参数是一个输出型参数
 -  
写文件 ~~ write
 -  
关闭文件 ~~ close
每次打开一个文件,都需要在进程对应内核PCB数据结构中, 申请一个文件描述符的表项,文件描述符表是有上限的.如果光打开,不关闭,此时就可能导致文件描述符被占满了,导致无法继续打开文件,所以一定关闭close文件.
 
 -  
 
 -  
 
 -  
 
 -  
 -  
网络编程&网络原理
-  
协议
网络中的基本概念 ~~ 协议: 针对数据格式的约定.
- 协议分层 
      
- 网络通信,是一个很复杂的工作,如果使用一个协议来完成所有的工作,这个协议就会很复杂. => 由此想到了,协议拆分,大的协议变成多个小点的协议,每个协议负责一部分工作.
 - 由于拆分出来的协议太多了,按照协议的功能/作用,进行不同程度的分类 => 即协议分层,而为了让协议之间更好的配合,约定,上层协议调用下层协议,下层协议给上层协议提供服务.(协议之间不能跨层交互) => 就构成了一个**“协议栈**”
 - “协议栈”: OSI 七层模型, TCP/IP 五层模型 
        
- 应用层: 数据具体要怎么使用.
 - 传输层: 只考虑起点和终点.
 - 网络层: 负责任意两个节点之间的传输,路径传输.
 - 数据链路层: 负责相邻节点之间的数据传输(通过网线/光纤/无线直接相连的两个路由器/交互机/主机….)
 - 物理层: 信息传输的公路
 
 
 - 网络数据传输的基本流程: 
      
- 封装: 发送方,把数据从上到下层层加上协议报头(包装快递).
 - 分用: 接受方,把数据从下层到上层进行解析(拆快递).
 
 
 - 协议分层 
      
 -  
网络编程
-  
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一处阻塞,不涉及这个问题. 
 -  
 -  
服务器程序典型流程
- 启动服务器(初始化),进行 Socket 的实例化.
 - 进入主循环(while true) 
          
- 读取请求并解析
 - 根据请求计算响应
 - 把响应写回到客户端
 
 
 -  
客户端典型流程
- 启动客户端,进行 socket 实例化.
 - 进入主循环. 
          
- 读取用户输入的内容.
 - 构造请求并发送.
 - 读取响应结果.
 - 把结果显示给用户.
 
 
 
 -  
 
 -  
 
 -  
 



















