2. 字节流
a) 字节输出流 OutputStream&FileOutputStream
i. OutputStream字节输出流简介
1. 是所有字节输出流的超类;
2. 定义了一些子类共性的方法
ii. FileOutputStream:文件字节输出流
1. 作用:把内存中的数据写入硬盘的文件中
2. 构造方法:
a) FileOutputStream(String name)创建一个具有制定名称的文件中写入数据的输出文件流
b) FileOutputStream(File file)创建一个向指定File对象表示的文件中写入数据的文件输出流
iii. 使用FileOutputStream方法 文件存储的原理和记事本打开文件的原理
iv. 字节输出流写多个字节的方法
1. write(byte[ ] b)将b数组写入文件
a) 如果写的第一个字节是正数(0-127),显示的时候会查询ascⅡ表
b) 如果第一个字节是负数,呢么第一个字节就会和第二个字节组成一个中文显示查询系统默认码表(GBK)
2. write (byte [ ]b ,int off ,int len)从指定字节组写入指定长度至文件
a) int off 数组的开始索引
b) 写几个字节
3. 写入字符串的方法,可以使用String类中的方法把字符串转换为字节数组“.getbyte”
v. 字符输出流的续写和换行
1. 续写在构造方法后面加上true:
boolean oppend:追加写开关
true:创建对象不会覆盖源文件,继续在文件末尾追加数据
false:创建一个对象,覆盖源文件
2. 换行:写换行符号
windows:\r\n
linux:/n
mac:/r
b) 字节输入流 InputStream&FileInputStream
i. 作用
1. InputStream:所用输出类的超类
2. FileInputStream:读取硬盘中的数据至内存
ii. 构造方法
1. FileInputStream(String name)
2. FileInputStream(File file):
构造方法的作用
创建一个FileInputStream对象
将FileInputStream对象指向构造方法中药读取的对象
3. 字符流
1. 网络编程入门
a) 软件结构
b) 网络通讯协议:连接和通讯的协议,它对数据的传输格式、传输速率、传输步骤等做了统一的规范,通讯双方必须遵守才能完成数据交换
i. TCP/IP协议:采用了4层的分层模型,每一层都呼叫它下一层所提供的协议来完成自己的需求:
应用层、传输层、网络层、数据链路层/物理层
c) 协议分类
i. UDP协议:用户数据报协议,是面向无连接通讯协议,数据的发送端和接受端不建立逻辑连接。这个协议消耗资源小,通讯效率高,同事在运用UDP协议时,由于UDP的面向无连接性,不能保证数据的完整性。
1. 特点:数据被限制在64kb以内,超出这个范围就不能发送
ii. TCP协议:传输控制协议,是面向连接的通信协议,即传输数据之前,在发送端和连接段建立逻辑连接,必须明确客户端和服务器端
1. 三次握手
a) 器端建立连接请求,等待服务器确认
b) 服务器向客户端返回一个相应,通知客户端收到了连接请求
c) 客户端再次向服务器端发送确认信息,确认连接
d) 网络编程三要素
i. 协议
ii. IP地址
1. IP地址:指互联网协议地址,俗称IP地址用来给一个网络中的计算机设备做唯一的编号
2. IPV4:是一个32位的二进制数:做多可以表示42亿个
3. IPV6:采用128位地址长度,每16个字节一组
4. 常用命令:
a) ipconfig:查看本机ip地址
b) ping 空格 IP地址
5. 特殊的IP地址:
本机的IP地址:127.0.0.1;localhost
iii. 端口号
1. 端口号:是一个逻辑端口,我们无法直接看到,可以通过一些软件查看。当我们使用网络软件,os就会为网络软件随机分配一个端口号。或者软件在打开时向os要指定的端口号,端口号由两个字节组成,取值在0-65535之间
2. 注意:
a) 1024之前的端口号不能使用,已经被os分配给已知的网络软件了
b) 网络端口号不能重复
3. 常用的端口号:
a) 80端口号 网络端口 www.baidu.com:80 正确的网站
b) 数据库端口号 mysql:3306 oracle:1521
c) Tomcat服务器:8080
4. 图解:
2. TCP通信程序
a) TCP通讯的概述
i. TCP通信能实现两台计算机之间的数据交互,通信的两端,要严格区分客户端和服务器端
ii. 通信的步骤 & 注意:
iii. 注意
1. 服务器端必须明确两件事:
a) 多个客户端同时和客户端进行交互,服务器必须明确和那个客户端进行的交互在服务器端有一个方法,叫accept客户端获取到请求的客户端对象
b) 多个客户端同时和客户端进行交互,就需要使用多个IO流对象
2. 服务器没有IO流,服务器可以获取获取到请求的客户端对象socket。使用每个客户端socket提供的IO流和客户端进行交互
3. 简单记:服务器使用客户端的流和客户端交互
b) Socket 类客户端
i. 构造方法:socket(String host,int port)创建一个流套接字并将其连接到指定端口号
1. String host:服务器主机的名称/服务器的IP地址
2. int port:服务器的端口号
ii. 成员方法”
1. OutputStream getOutputStream() 返回此套接字的输出流。
2. InputStream getInputStream() 返回此套接字的输入流。
3. void close() 关闭此套接字。
iii. 实现步骤
1. 创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号
2. 使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
3. .使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据
4. 使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
5. 使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据
6. 释放资源(Socket)
iv. 注意
1. .客户端和服务器端进行交互,必须使用Socket中提供的网络流,不能使用自己创建的流对象
2. 当我们创建客户端对象Socket的时候,就会去请求服务器和服务器经过3次握手建立连接通路
这时如果服务器没有启动,那么就会抛出异常ConnectException: Connection refused: connect
如果服务器已经启动,那么就可以进行交互了
c) Socket 服务器
i. 构造方法:
ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
服务器端必须明确一件事情,必须的知道是哪个客户端请求的服务器
所以可以使用accept方法获取到请求的客户端对象Socket
ii. 成员方法
Socket accept() 侦听并接受到此套接字的连接。
iii. 服务器的实现步骤:
1. 创建服务器ServerSocket对象和系统要指定的端口号
2. 使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
3. 使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
4. 使用网络字节输入流InputStream对象中的方法read,读取客户端发送的数据
5. .使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
6. 使用网络字节输出流OutputStream对象中的方法write,给客户端回写数据
7. 释放资源(Socket,ServerSocket)