java EE学习总结 第七周(包含思维导图) 主要内容I/O框架、网络编程、反射
第七周
Day31、Day32
I/O框架
-
流的概念
- 内存与存储设备之间传输数据的通道
-
流的分类
-
按方向【重点】
-
输入流
- 将存储设备中的内容读入到内存中
-
输出流
- 将,<内存>中的内容写入到<存储设备>中
-
-
按单位
-
字节流
- 以字节为单位,可以读写所有数据
-
字符流
- 以字符为单位,只能读写文本数据
-
-
按功能
-
节点流
- 具有实际传输数据的读写功能
-
过滤流
- 在节点流的基础之上增强功能
-
-
-
字节流
-
字节流的父类(抽象类)
-
InputStream 字节输入流
- public int read(){}
- public int read(byte [] b ){}
- public int read(byte[] b ,int off,int len){}
-
OutputStream: 字节输出流
- public void write(int n ){}
- public void write(byte[] b){}
- public void write(byte[] b ,int off ,int len){}
-
-
字节节点流
-
FileOutputStream :
- public void write(byte[] b);//一次写多个字节,将数组中所有字节,写入输出流
-
FileInputStream:
- public int read)(byte[] b)//从流中读取多个字节,将读到内容存入b 数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1
-
-
字节过滤流
-
缓冲流: BufferedOutputStream/BufferedInputStream
- 提高IO效率,减少访问磁盘的次数
- 数据存储在缓冲区中,flush 是将缓存区的内容写入文件中,也可以直接close
-
对象流:ObjectOutputStream/ObjectInputStream
-
增强了缓冲区功能
-
增强了读写8种基本数据类型和字符串功能
-
增强了读写对象的功能
- readObject() 从流中读取一个对象
- writeObject(Object obj) 向流中写入一个对象
-
使用流传输对象的过程称为序列化、反序列化
-
-
-
对象序列化
-
序列化细节
- 必须实现Serializable接口
- 必须保证其所有属性均可序列化
- transicent 修饰为临时属性,不参与序列化
- 读取到文件尾部的标志: java.io.EOFException
-
-
-
(字符编码)编码方式
- ISO-8859-1收录除了ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号
- UTF-8 针对Unicode 的可变长长度字符编码
- GB2312 简体中文
- GBK 简体中文、补充
- BIG5 台湾,繁体中文
- 注意:当编码方式不一致时,会出现乱码
-
字符流
-
字符流的父类(抽象类):
-
Reader:字符输入流
- public int read(){}
- public int read(char[] c){}
- public int read(char [] b, int off ,int len){}
-
Write:字符输出流
- public void write(int n ){}
- public void write(String str[]){}
- public void write(char [] c){}
-
字符节点流
-
FileWriter
- public void write(String str ) // 一次写入多个字符,将b 数组中所有字符,写入输出流
-
FileReader
- public int read(char [] c ) // 从流中读取多个字符,将读到内容存入c 数组,返回实际读到的字符数,如果达到文件的尾部,则返回-1
-
-
-
字符过滤流
-
缓冲流:BufferedWrite、BufferedReader
- 支持输入换行符
- 可一次写一行,读一行
-
printWriter
- 封装了print() 、println () 方法,支持写入后换行
-
-
字符节点流
-
桥转换流:InputStreamReader/OutputStreamWriter
- 可将字节转换为字符流
- 可设置字符的编码方式
-
使用步骤
- 创建节点流
- 创建过滤流,设置字符编码集
- 封装过滤流
- 读写数据
- 关闭流
-
-
-
File类
-
概念:代表物理盘符中的一个文件或者文件夹
-
方法
- createNewFile() // 创建一个新文件
- Mkdir ()//创建一个新目录
- Delete()//删除文件或新目录
- Exists()//判断File对象所对象所代表的是否存在
- getAbsolutePath()// 获取文件的绝对路径
- getName() //取得名字
- getParent() //获取文件/目录所在的目录
- isDirectory() // 是否是目录
- isFile() // 是否是文件
- length() //获得文件的长度
- ListFiles()// 列出目录中的所有内容
- renameTo()//修改文件名为
-
Day33-34
网络编程
-
什么是网络
- 由点和线构成,表示诸多对象间的相互联系
-
计算机网络
- 为实现资源共享和信息传递,。通过通信线路连接起来的若干主机(Host)
- 互联网:点与点相连
- 万维网:端与端相连
- 物联网:物与物相连
- 网路编程:让计算机与计算机之间建立连接、进行通信
-
网络模型
- 第一层:物理层设备之间的数据通信提供传输信号和物理介质。(双绞线、光纤纤维)
- 第二层:链路层在物理层上,通过规程或协议(差错控制)来控制传输数据的正确性。(MAC)
- 第三层:网络层负责定义了能够标识所有网络节点的逻辑地址(IP地址)
- 第四层:传输层负责是否选择差错恢复协议、数据流重组、错误顺序重排。(TCP、UDP)
- 第五层:会话层负责应用建立和维持会话,使通信在失效时继承恢复通信。(断点续传)
- 第六层:表示层负责定义转换数据格式及加密,允许选择以二进制或ASCII格式传输
- 第七层:应用层负责文件访问和管理、可靠运输服务、远程操作服务。(HTPP、FTP、SMTP)
-
通信协议
-
TCP/IP 模型
-
一组用于实现网络互连的通信协议,将协议分成四个层次
-
分四层
-
应用层
-
对应OSI参考模型的应用层、表示层、会话层
- 第四层:应用层负责传送各种最终形态的数据,是直接与用户打交道的层,典型协议是HTTP、FTP等
-
-
传输层
-
对应OSI参考模型的传输层
- 第三层:传输层负责传送文本数据,主要协议是TCP、UDP协议
-
-
网络层
-
对应OSI参考模型的网络层
- 第二层:网络层负责分配地址和传送二进制数据,主要协议是IP协议
-
-
网络接口层
-
对应OSI参考模型的数据链路层和物理层
- 第一层:接口层负责建立电路连接。是整个网络的物理基础,典型的协议包括以太网、ADSL等等
-
-
-
TCP协议: 传输控制协议
- 是一种面向连接的、可靠性的、基于字节流的传输层通信协议。数据大小无限制。建立连接的过程需要三次握手,断开连接的过程需要四次握手
-
UDP协议:用户数据报协议
- 是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,每个包的大小64KB
-
-
IP
-
IP协议: Internet Protocol Address 互联网协议地址/网际协议地址
- 分配给互联网设备的数字标签(唯一标识)
-
IP地址分为两种
- IPV4 :4字节32位整数,并分成4段8位的二进制数,每8位之间用圆点隔开,每8位整数可以转换为一个0^255的十进制整数 格式:D.D.D.D 例如 255.255.255.255
- IPV6 :16字节128位整数,并分成8段十六进制数,每16位之间用圆点隔开。每16位整数可以转换为一个0^65535 的十进制数 格式: X. X.X .X.X.X.X.X 例如FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF
-
IPV4 的应用分类
- A类:政府机构,1.0.0.1^126.255.255.254
- B 类:中型企业,128.0.0.1^191.255.255.254
- C 类:个人用户,192.0.0.1^223.255.255.254
- D 类:用于组播,224.0.0.1^239.255.255.254
- E 类:用于实验,244.0.0.1^255.255.255.254
- 回环地址:127.0.0.1, 指本机,一般用于测试使用
- 查看IP命令:IPconfig
- 测试IP命令:ping D.D.D.D
-
-
Port
-
端口号:在通信实体上进行网络通讯的程序的唯一标识
-
端口分类
- 公认端口: 0^1023
- 注册端口:1024^49151
- 动态或私有端口:49152^65535
-
常用端口
- MySQL:3306
- Oracle:1521
- Tomcat:8080
- SMTP:25
- web 服务器:80
- FTP服务器:21
-
-
InetAddress类
-
概念:表示互联网协议(IP)地址对象,封装了该IP相关的所有信息,并提供获取信息的常用方法
-
方法:
- public static InetAddress getLocalHost() 获取本地主机地址对象
- public static InetAddress getByName(String host) 根据主机名称获得地址对象
- public static InetAddress [] getALLName(String host ) 获得所有相关地址对象
- public String getHostAddress() 获取IP地址字符串
- public String getHostName() 获取IP地址主机名
-
-
-
网络编程
-
基于TCP的网络编程
-
Socket 编程:
- Socket(套接字)是网络中的一个通信节点
- 分为客户端Socket 与服务器ServerSocket
- 通信要求:IP地址+端口号
-
-
开发步骤
-
建立通信连接(会话)
- 创建ServerSocket,指定端口号
- 调用accept 等待客户端接入
-
客户端请求服务器
- 创建Socket,指定服务器IP+ 端口号
- 使用输出流,发送请求数据给服务器
- 使用输入流,接收响应数据到客户端(等待)
-
服务器响应客户端
- 使用输入流,接收请求数据到服务器(等待)
- 使用输出流,发送响应数据给客户端
-
-
课堂案例
-
使用S coket编程实现服务器端注册
- 注册信息保存在properies 文件中
- 封装格式
- Id= {id :“1001”,name :}
- 注册成功后返回字符串“注册成功”
-
使用Scoket编程实现服务器端登录
- 获取properties 文件中的用户信息,进行用户名与密码的校验
- 校验成功后返回字符串“登录成功”
-
-
总结
- 计算机网络:为实现资源共享和信息传递,通过该通信线路连接起来的若干主机
- TCP协议:是一种面向连接的,可靠的,基于字节流的传输层通信协议。数据大小无限制
- IP:分配给互联网设备的数字标签(唯一标识)
- Port:在通信实体上进行网络通讯的程序的唯一标识
- Scoket 编程:建立连接、接收请求、发送响应
Day35
反射
-
什么是类对象
- 类的对象:基于某个类new 出来的对象,也称为实例对象
- 类对象:类加载的产物,封装了一个类的所有信息(类名、父类、接口、属性、方法、构造方法)
-
获取类对象
-
通过类的对象。获取类对象
- Student s = new Student(); Class c = s.getClass()
-
通过类名获取类对象
- Class c = 类名.class;
-
通过静态方法获取类对象
- Class c = Class.forName(“包名.类名”);
-
-
常见操作
-
常用方法
- public Sring getName()
- public Package getPackage()
- public Class<? super T >getSuperclass()
- public Class<?>[] getInterfaces()
- public Field[] getFields()
- public Method[] getMethods()
- public Constructor<?>[] getConstructors()
- public T newInstance()
-
-
设计模式介绍
-
工厂设计模式
- 开发中有一个非常重要的原则“开闭原则”。对拓展开放、对修改关闭
- 工厂模式主要负责对象创建的问题
- 可通过反射进行工厂模式的设计,完成动态的对象创建
-
-
单例设计模式
-
单例模式
-
单例:只允许创建一个该类的对象
-
方式1:饿汉式(类加载时创建,天生线程安全)
class Singletion {
private static final Singleton instance = new Singleton();
private Singletonb() {}
public static Singleton getInstance(){}
return instance;}
-
方式2“懒汉式(使用时创建,线程不安全,加同步)
class Singleton {
private static Singleton intance = null ;private Sington(){}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();}
return instance;}
} -
方式3:懒汉式(使用时创建,线程安全)
class Singleton{
private Singleton(){}private static class Holer{
static Singleton s = new Singleton();
}
public static Singleton instance(){retuen Holder.s;
}}
-
-
-
总结
-
类对象
- Class对象,封装了一个类的所有信息;程序运行中,可通过class 对象获取类的信息
-
获取类对象的三种方式
- Class c = 对象。getClass()
- Class c = 类名.class;
- class c = Class.forName(“包名.类名”);
-
工厂模式
- 主要用于创建对象,通过反射进行工厂模式的设计,完成动态的对象创建
-
单例模式
- Singleton ,只允许创建一个该类的对象
微信公众号:爱编码的程序员
- Singleton ,只允许创建一个该类的对象
-