第七周
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.255IPV6 :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.254B 类:中型企业,128.0.0.1^191.255.255.254C 类:个人用户,192.0.0.1^223.255.255.254D 类:用于组播,224.0.0.1^239.255.255.254E 类:用于实验,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:3306Oracle:1521Tomcat:8080SMTP:25web 服务器:80FTP服务器: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 ,只允许创建一个该类的对象
微信公众号:爱编码的程序员