抽象类,不能new对象,只能被继承
转换流:字符流与字节流之间的转换
打印流
PrintStream
PrintWriter
物殊流
DataInputStream
DateOutputStream
抽象类,不能new对象,只能被继承
转换流:字符流与字节流之间的转换
打印流
PrintStream
PrintWriter
物殊流
DataInputStream
DateOutputStream
IO流的概念
1、IO就是Input和Output的简写,也就是输入与输出的含议
2、IO流就是指读写数据时像流水一样从一端流到另外一端,因此得名为”流“。
基本分类:
1、按照读写数据的基本单位不同,分为字节流和字符流
字节流为字节为单位进行读写
字符流为字符为单位进行读写
其中字节流主要指以字节为单位进行数据读写的流,可以读写任意类型的文件
其中字符流主要以字符(2个字节)为单位进行数据读写的流,只能读写文本文件
按照读写数据方向不同,分为输入流和输出流(站在程序的角度)
其中输入流主要指从文件中读取数据内容输入到程序中,也就是读文件
其中输出流
节点流:如果流与文件直接关联,为节点流
处理流:套在其它文件上,间接关联的为处理流
Nosql
Redis是Nosql的一种实现形式
Redis
概念:Redis(Remote Dictionary Server),中文翻译远程字典服务
是用C语言开发的一个开源的高性能键值对(key-value)数据库
特征:
1、数据间没有必然的关联关系
2、内部采用单线程机制进行工作
3、高性能。官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/2,写的速度是81000次/s
4、多数据类型支持
字符串类型 string
列表类型 list
散列类型 hash
集合类型 set
有序集合类型 sorted_set
5、持久化支持。可以进行数据突难恢复
Redis的应用
为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等
任务队列,如秒杀、抢购、购票排队等
Redis简介
不可回避的问题:
奥运会门票预售系统开放第一天,票务网站被浏览次数达到20000次
一个神奇的网站:
盘点12306:一个总在”崩溃中“的神奇网站
问题现象:
海量用户
高并发
罪魁祸首------关系型数据库
性能瓶劲:磁盘IO性能低下
扩展瓶颈:数据关系复杂,扩展性差,不便于大规则集群
解决思路:
1、 降低磁盘IO次数,越低越好 --- 内存存储
2、去除数据间关系,越简单越好 --
Nosql
NoSQL:即Not-OnlySQL(泛指非关系型的数据库),作为关系型的数据库的补充
作用:应对基于海量用户和海量数据前提下的数据处理问题
特征:
可扩容,可伸缩
大数据量下的高性能;
灵活的数据模型
高可用
常见的Nosql数据库
Redis
memcache
HBase
MongoDB
解决方案(电商场景)
1、商品基本信息
名称
价格
厂商 存在MySQL
商品附加信息
描述
详情
评论 MongoDB
3、图片信息 分布式文件系统
4、搜索关键字 ES、Lucene solr
5、热点信息
高频、波段性
课程计划:
Redis 基础
Redis 入门
数据类型
通用命令
jedis
Redis 高级
持久化
redis.conf
事务
集群
Redis 应用
企业级解决方案
File类
java.IO.File类主要描述文件或目录路径的抽象表示信息,可以获取文件或目录的特征信息
只能获取特征信息,对文件本身的信息不能获取
IO流,才能获取文件本身的信息
先判断文件是否存在,如果存在获取名称
历史遗留问题
方法重写的时候,
1、
2、访问权限不能变小,可以相同或是变大
3、不能抛出更多的异常
该课程必要的时候,要重新温习
异常的避免
异常的捕获
捕获完了之后,仍然处理不了这个异常
异常的抛出:好比感冒抛出去,交给医院的医生处理,为异常的抛出
throws FileNotFoundException
抛出
finally,无论有没有异常,都需要执行的代码
try,catch对于异常的捕获,把异常的发生甩到了运行阶段
注意事项:
a.当需要编写多个catch分支时,切记小类型应该放在大类型的前面;
b.懒人的写法:
catch(Exception e){}
c.finally 通常用于进行善后处理,如:关闭已经打开的文件等。
异常的发生可以避免,用if语句
如果避免不了异常,需要对异常进行捕获
异常的就是一种不正常的情况
在编程的过程中,要避免异常的发生
在以后的开发中尽量使用if条件来判断来避免异常的发生
但是过多的if条件判断会导致程序的代码加长,臃肿、可读性差
编程中的异常情况
RuntimeException 运行时异常,也叫做非检测性异常
IOException 和其它异常---其它异常,也叫做检测性异常,所谓检测性异常就是在编译阶段能被编译器检测出来的异常
当程序执行过程中发生异常但又没有手动处理时,则由java虚拟机采用默认方式处理异常,而默认处理方式就是:打印异常的名称、异常发生的原因、异常发生的位置以及终止程序
一定要背会的几个异常:
ArithmeticException ---算术异常
ArrayIndexOutOfBoundsException类---数组下标越界异常
NullPointerException ---空指针异常
ClassCastException---类型转换异常
NumberFormatException---数字格式异常
在编译阶段,就是能检测出的异常,叫做检测性异常
注意事项:当程序执行过程中发生异常但又没有手动处理时,则收java虚拟机采用默认方式处理异常,而默认处理方式就是:打印异常的名称,异常发生的原因,异常发生的位置以及终止程序
异常机制
异常就是不正常的含义,在java语言中主要指程序执行中发生的不正常情况
java.lang.Throwable 类是java语言中错误Error和异常
其中Error类主要用于描述java虚拟机无法解决的严重错误,通常无法编码解决,如:jVM挂掉了等。
其中Exception类主要用于描述因编程错误或偶然外在因素导致的轻微错误,通常可以编码解决,如:0作为除数等;
异常,就是“不正常”的含义,在java语言中主要指程序执行中发生的不正常情况
java.lang.Throable类是Java语中错误Error和异常的超类
class Error
class Exception
其中Error类主要用于描述java虚拟机无法解 决的严重错误,通常无法编码解决,如:jvm挂掉了等
其中Exception类主要用于描述因编程或偶然外在因素导致的轻微错误,通常可以编码解决,如:0作为除数等
基于TCP协议模型的框架实现
基于TCP协议的编程模型
如何理解TCP协议的编程模型
服务器:Server
1、准备一个大插排
2、坐等客户上门
3、不断地充电
4、下班回家了
客户端:Client
1、取下充电器
2、不断地充电
3、取下充电器交钱走人
在大插排处,保持空闲状态,能够诱惹更多的用户
在C/S模式下客户向服务器发出服务请求,服务器接收请求后提供服务
例如:在一个酒店中,顾客找报务员点菜,服务员把点菜单通知厨师,厨师按点菜单做好菜后让服务员端给客户,这就是一种C/S工作方式。
如果把酒店看作一个系统,服务员就是客户端,厨师就是服务器。这种系统分工和协同工作的方式就是C/S的工作方式
客户端部分:为每个用户所专有的、负责执行前台功能
服务器部分:由多个用户共享的信息与功能,招待后台服务
IP地址:绝大多数路由器的登录地址,主要配置用户名和密码以及mac过滤
IP地址是互联网中的唯一地址标识,本质上是32位二进制组成的整数,叫做IPv4,当然也有128位二进制组成的整数,叫做IPv6,16个字节。
目前主流的,还是IPv4
日常生活中采用点分十进制表示法来进行IP地址的描述,将每个字节的二进制转化为一个十进制整数,不同整数之间采用小数点隔开
点分十进制
特殊的地址:
本地回环地址 hostAddress :127.0.0.1 代表本机
主机名(hostName) :localhost
IP地址:可以定位到具体的某一台设备
端口号:可以定位到该设备中具体某一个进程
端口号本质上是16位二进制组成的整数,表示范围是:0~65535,其中0~1024之间的端口号通常被系统占用,建议编程从1025开始使用
特殊的端口:
HTTP:80
FTP:21
Oracle:1521
MySQL:3306
Tomcat :8080
网络编程需要提供:IP地址+端口号,组合在一起叫做网络套接字:Socket
网络套接字:Socket
相关的协议:
以前写的代码与本地计算机使用。网络编程,不仅在当前计算机的内部通信,与外部计算机通信
就像:与自己聊天,什么语言都无所谓
与外国人聊,就需要双方都听得懂的语言
协议;让计算机之间进行统一通信的规则;
什么叫协议:计算机在网络中实现通信就必须有一些约定或者规则,这种约定和规则就叫做通信协议
通信协议可以对速率、传输代码、代码结构、传输控制步骤、出错控制等制定统一的标准。
TCP协议:是一种面向连接的协议,类似于打电话
1、建立连接--->进行通信--->断开连接
2、在传输前采用“三次握手”方式
3、在通信的整个过程中全程保持连接、形成数据传输通道
4、保证了数据传输的可靠性和有序性
5、是一种全双工的字节流通信方式、可以进行大数据量的传输
6、传输完毕后需要释放已建立连接,发送数据的效率比较低
全双工,可以一边说一边听。
UDP协议:
用户数据报协议,是一种非面向连接的协议,类拟于写信
1、在通信的整个过程中不需要保持连接,其实是不需要建立连接
2、不保证数据传输的可靠性和有序性
3、是一种全双工的数据报通信方式,每个数据报的大小限制在64k内
4、发送数据完毕后无需释放资源、开销小,发送数据的效率比较高,速度快。
一个打电话,一个写信的之间的区别
1、TCP保证数据传输的可靠、有序、发送效率低
2、UDP发送的效率比较高
丢数据,能忍,用的UDP。
保证数据的绝对安全。
医疗方面的,军事方面的,用TCP
连接的时候:三次握手
断开的时候:四次挥手
网络编程:基于物联网的通信编程
java写一个代码与其它的计算机通信
网络通讯软件
OSI Open System Interconnect ,即开放式系统互联。
五层模型:应用层、传输层、网络层、数据链路层、物理层
传输层:TCP/UDP
网络层:TCP/IP
七层模型:应用层:应用层、表示层、会话层
相同的顺序,逐层的包装;
机反的顺序,逐层的拆包;
当发送数据时,需要对发送的内容按照上述七层模型进行层层加包后发送出去
当接收数据时,需要对接收的内容,按照上述七层模型相反的次序层层拆包并显示出来
java官方才j
当程序结果可知:当两个线程同时对同一个账户进行取款时,导致最终的账户余额不合理
引发原因:线程一执行取款时还没有来得及将取款后的余额写入后台,线程二就已经开始取款
解决方案:让线程一执行完毕取款操作后,再让线程二执行即可,将线程的并发操作改为串行操作
线程同步:是改并行为串行么???
开发中,不提倡使用。
实现方式:
在java语言中使用synchronized关键字来实现同步/对象锁机制从而保证线程执行的原子性,具体方式如下:
原子性:线程执行的单位是最小单元,不能再划分了。
要么不执行,要不执行完,不能打断
一个文件中就一个类,类名与文件名相同
Public修饰的公共类必须只有一个,与文件名相同。
线程同步机制:把原来多线程的并发操作改成现在的串行操作
当两个人对同一个帐户取款时,