day09
IO流
分类:
字节流:byte/byte[] 可以操作任意类型的文件
字节输入流: input stream 抽象类
字节输出流:~~~ output stream 抽象类
字符流:char/char[]/string 只能读写文本文件
字符输入流: reader 抽象类
字符输出流:writer 抽象类
字节流
字节输出流
抽象类 OutputStream
成员方法
void close()
关闭此输出流并释放与此流有关的所有系统资源。
void flush()
刷新此输出流并强制写出所有缓冲的输出字节。
写字节的成员方法
void write(byte[] b)
将 b.length 个字节从指定的 byte 数组写入此输出流。
void write(byte[] b, int off, int len)
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
abstract void write(int b)
将指定的字节写入此输出流。
写入数据的原理
Java程序->JVM->os操作系统->os调用写数据方法->吧数据写入到文件中
字节输入流
抽象类 inputstream
子类 fileinputstre
读取数据原理
java程序>jvm>os读取数据方法>读取文件
字符流
字符输出流
writer 字符输出流,所有字符输出流的顶层父类,抽象类
FileWriter: 子类
FileReader
文件字符输入流子类
properties属性集合,双列集合,extends hashtable
属于map集合
Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
是一个唯一和IO流相结合的集合
DAY10
缓冲流使用步骤:
1:创建一个字节输出流对象,在构造方法中绑定要输出的目的地;
2:创建缓冲流输出对象,构造方法中传递fileoutputstream对象,提高fileoutputstream对象效率;
3:使用bufferoutputstream对象中的方法write,把数据写入到缓冲区中;
4:释放资源;
把字节转换为字符-->解码
把字符转换成字节-->编码
不指定默认使用UTF-8
所以:
字符流 = 编码表+字节流
解决:乱码 (网页)
序列化流(对象流)
把对象以流的方式,写入到文件中保存,叫写对象,也叫对象的序列化
对象中包含的不仅仅是字符,使用字节流
把文件中保存的对象,以流的方式读取出来,也叫读对象,也叫对象的反序列化
读取的文件保存的是字节,使用字节流
static 修饰的成员变量不能被序列化,序列化的都是对象
被transient修饰的成员变量,不能被序列化
序列化流的场景:
用到 "缓存" 就是一些数据,是存储在内存中的,比如存储某个用户登录的状态
而内存中的数据,服务器一重启,数据就没了,所以我们需要在服务器重启前,将内存中的数据写入到磁盘保存
这时就可以用 序列化流
服务器重启后,先通过反序列化流读取内存,这样就能保证之前的状态
java.io.BufferedOutputStream类: 缓冲字节输出流
// 构造方法
BufferedOutputStream(OutputStream?out): 使用基本流创建一个缓冲字节输出流
BufferedOutputStream(OutputStream?out, int size): 使用基本流创建一个缓冲字节输出流, 设置缓冲区大小
java.io.BufferedInputStream类: 缓冲字节输入流
// 构造方法
BufferedInputStream(InputStream?in): 使用基本流创建一个缓冲字节输入流
BufferedInputStream(InputStream?in, int size): 使用基本流创建一个缓冲字节输入流, 设置缓冲区大小
java.io.BufferedWriter类:
// 构造方法
BufferedWriter(Writer?out): 使用基本流创建一个缓冲字符输出流
BufferedWriter(Writer?out, int size): 使用基本流创建一个缓冲字符输出流, 设置缓冲区大小
// 特有方法
void?newLine(): 写入一个换行符, 换行符自动根据当前系统确定
java.io.BufferedReader类: 缓冲字符输入流
// 构造方法
BufferedReader(Reader?in): 使用基本流创建一个缓冲字符输入流
BufferedReader(Reader?in, int size): 使用基本流创建一个缓冲字符输入流, 设置缓冲区大小
// 特有方法
String?readLine(): 一次读一行字符串, "不包含换行符". 读到文件末尾返回null
java.io.OutputStreamWriter类: 输出转换流. 字符流通往字节流的桥梁
// 构造方法
OutputStreamWriter(OutputStream?out): 使用默认编码表创建转换流
OutputStreamWriter(OutputStream?out,?String?charsetName): 使用指定编码表创建转换流
java.io.InputStreamReader类: 输入转换流. 字节流通往字符流的桥梁
// 构造方法
InputStreamReader(InputStream?in): 使用默认编码表创建转换流
InputStreamReader(InputStream?in,?String?charsetName): 使用指定编码表创建转换流
java.io.ObjectOutputStream类: 对象字节输出流
// 构造方法
ObjectOutputStream(OutputStream?out)
// 特有成员方法
void?writeObject(Object?obj): 将对象写出
java.io.ObjectInputStream类: 对象字节输入流
// 构造方法
ObjectInputStream(InputStream?in)
// 特有成员方法
Object?readObject(): 读取对象
java.io.PrintStream类: 字节打印流
// 构造方法
PrintStream(File file): 创建字节打印流, 输出到一个文件
PrintStream(OutputStream out): 创建字节打印流, 输出到一个字节输出流
PrintStream(String?fileName): 创建字节打印流, 输出到一个文件路径
java.lang.System类:
// 静态方法
static void setOut(PrintStream out): 设置System.out的输出目的地为参数的打印流
字节缓冲流
给基本的字节输入流增加一个缓冲区(数组)提高基本的字节输入流的读取效率
缓冲字节输出流
字节缓冲输入流
字符缓冲输出流
缓冲字符输入流
特有成员方法
String readLine()读取一个文本行,读取一行数据
转换流 extends 字符流
转换流可查询指定码表
inputstreamreader转换流
字节流通向字符流的桥梁
吧字节转换字符->解码
outputstreamwriter转化流
字符流通向字节流的桥梁
把字符转换字节->编码
OutputStream:父类
ObjectOutputStream:子类
序列化流:
把对象以流的方式写入到文件中保存,
特有成员方法:
writeObject(指定的对象);
InputStream:父类
ObjectInputStream:子类
反序列化流:
吧文件中保存的对象,以流的方式读取出来
特有成员方法:
readObject()
被transient修饰的成员变量,不能被序列化(值写不进去)
serializable接口 标记性接口
进行序列化和反序列化 需实现 serializable接口
创建的类如果发生改变,需创建 serializable序列号
打印流
PrintStream
只有输出,没有输入
DAY11
C/S结构:全称为client/server结构,是指客户端和服务器端,常见的有QQ 视频动画 ,3D贴图
B/S结构:全称browser/server结构,是指浏览器和服务器结构,常见浏览器有 谷歌,火狐,ie
网络编程:在一定的"协议"下实现两台计算机通信的程序
UDP: user datagram protocol用户数据报协议
特点:
无连接的不可靠协议
数据按包发送,,64k一个包
速度快效率高,容易丢包
用于视频直播,网络电话
TCP: 传输控制协议 面向连接的通信协议
三次握手tcp协议可以保证
TCP: Transmission Control Protocol, 传输控制协议
特点:
1. 需要建立连接的可靠协议
2. 数据传输无大小限制
3. 速度慢效率低
用于文件下载, 浏览网页
常用的端口号:
1: 80 端口 网络端口
2: 数据库 mysql:3306 oracle :1521
3: tomcat 服务器:8080
TCP
通信步骤:
服务器端先启动
服务器端不会主动的请求客户端
必须使用客户端请求服务器
客户端和服务器会建立一个逻辑连接
而这个连接中包含一个对象
这个对象就是IO对象
客户端和服务器端可以使用
IO对象进行通信
通信的数据不仅仅是字符
所以IO对象时字节流对象
os.write("HTTP/1.1 200 OK\r\n".getBytes());
os.write("Content-Type: text/html\r\n".getBytes());
os.write("\r\n".getBytes());
java.net.ServerSocket类: TCP服务端
// 构造方法
ServerSocket(int port): 创建一个TCP服务端, 并监听指定端口
// 成员方法
Socket accept(): 监听数据, 会阻塞. 收到数据后返回Socket对象
void close(): 关闭服务端ServerSocket
java.net.Socket类: TCP客户端
// 构造方法
Socket(String ip, int port): 创建TCP客户端对象
// 成员方法
OutputStream getOutputStream(): 获取输出流对象, 用于发送数据
InputStream getInputStream(): 获取输入流, 用于接收数据
void shutdownOutput(): 关闭输出流, 告知服务端数据发送完毕
void close(): 关闭客户端Socket
网络编程
在一定的协议下,实现两台计算机的通信的程序
协议分类
UDP:User Datagram Protocol, 用户数据报协议
TCP:Transmission Control Protocol, 传输控制协议
IP地址分类
IPV4
IPV6
端口号:是一个逻辑端口,使用一些软件查看端口号
网络编程三要素
通信协议
IP地址(域名:便于记忆的主机名称,可以解析到某个IP地址,这样通过域名就能找到对应的IP地址)
端口号
软件结构
c/s结构: 客户端/服务器
b/s结构: 浏览器/服务器
访问速度快,扩大市场,更新方便
TCP通信程序
socket类 TCP客户端
serversocket类 TCP服务端
实现两台计算机之间的数据交互,通信的两端,c/s
文件上传原理
客户端读取本地的文件,把文件上传到服务器,服务器再把上传的文件保存到服务器的硬盘上
|
|