📄 day14.txt
字号:
CoreJava(day14) 2007-12-20 -- 李艳
对象的序列化接口Serializable(课堂代码:Person.java,TestObjectOutput.java,TestObjectInput.java)
想要在网络中传递对象就必须要序列化。
Serializable接口没有方法,是标识接口
serialVersionUID的静态常量,在接受传输的数据时会自动检查该值,保证版本的相同。
包名、类名、属性可以被序列化
方法、构造器不会序列化
所有的静态属性都不会被序列化
属性会被递归序列化,即一个序列化对象内部属性的对象也需要序列化。若内部属性不支持序列化,就会抛出不能序列化异常。
多态,在序列化时用的是实际的对象。
加上transient关键字的属性不被序列化,用于保护序列化时的敏感数据。
java.nio包 (课堂代码:TestCharBuffer.java)
当有大的文件需要处理的时候,为了不影响性能建议用直接缓冲。
Buffer有直接缓冲和间接缓冲两种。
只有ByteBuffer类提供了直接缓冲。使用直接缓冲,不影响程序。其它类想用直接缓冲需要进行转换。
java.nio.*; 块
java.nio.channels;通道---读写通道
java.nio.charset;编码---字符集、编码、解码
java.nio.Buffer:一种用于特定的基本类型数据的容器
java.nio.ByteBuffer:字节缓冲区,
java.nio.CharBuffer:字符缓冲区
java.nio.MappedByteBuffer:是特殊的ByteBuffer。直接字节缓冲区,其内容是文件的内存映射区域
缓冲--->数组(类型匹配) ,8位,
容量代表内存开辟部分
界限代表可用部分
位置代表当前指针
容量>=界限>=位置
nio称为无阻塞的IO(经过优化的IO)
获得类对象的方式:
1、new 本类构造 (看API的构造部分)
2、new 子类构造(多态) (API实现子类部分)
3、本类static方法 (API方法部分)
4、用其它类对象调用方法的返回值。 (API另请参见)
flip()相当于截断没有用的空间,然后把指针移向开头
java.nio.channels: (课堂代码:TestChannel.java)
1、先建立IO流(FileInputStream)
stream.FileOutputStream
读写流RandomAccessFile
2、IO流.getChannel()获得通道
3、创建大小合适的ByteBuffer(用这个allocate(int))
4、通道:read(buffer)---输入
write(buffer)---输出
5、关闭所有的流和通道,先关通道,后关流。
6、如果有多线程并发,可以使用通道.lock()方法,获得FileLock对象用FileLock.release()释放。
7、当遇到编码问题,使用Charset、CharsetDecoder、CharsetEncoder解决。
方法(forName,encode,decode).
java.nio.charset.Charset---编码类
java.nio.charset.CharsetDecoder---解码器
java.nio.charset.CharsetEncoder---编码器-->行为
网络编程:
URL:网址
OSI网络参考模型(理论性较强的模型)
七层,应用层、表示层、会话层、传输层、网络层、数据链路层、物理层:
网络层:寻址、路由(指如何到达地址的过程)
传输层:端口连接
TCP模型:应用层/传输层/网络层/网络接口
层与层之间是单向依赖关系,上层依赖于下层,下层不依赖于上层,层与层之间的连接是虚连接。对等层之间建立协议。
端口是一种抽象的软件结构,与协议相关:TCP23端口和UDT23端口为两个不同的概念。
端口应该用1024以上的端口,以下的端口都已经设定功能。
TCP/IP模型
应用层:Application
(FTP,HTTP,TELNET,POP3,SMPT)
传输层:Transport
(TCP,UDP)
网络层:Network
(IP,ICMP,ARP,RARP)
IP:起名协议
ARP:地址解析协议
物理+数据层:Link:
(Device driver,….)
手机短信:点对点式
A类:0--127
B类:128-191
C类:192-223
D类:224--
IP地址是由4个255数字组成。
127.0.0.1是本机地址
端口:由计算机硬件、软件模拟而成,与协议相关,ip+端口才能交互,端口有0--6成多数字,保留端口是0--1023,稳定端口:1024--4万多,动态:4万多---
保留端口和动态端口不要用。
例:21是FTP的端口,7是ECHO的端口,80是HTTP端口(网页),7001:WebLogic服务器,8080:Oracle Http,Tomcat服务器,1521:Oracle的监听外来连接端口
TCP:传输层协议
保证地址、主机一一对应(ip地址+网卡地址)
java.net.InetAddress:IP地址类
创建网络连接:
ServerSocket等待连接
Socket()连接上交互
网络流传递:
OutputStream
InputStream
关闭时两个连接都要关闭
网络流传递时的原则:你读我写,一读一写
socket(套接字)就是ip+port.
Server端编码的步骤:(课堂代码:TestServer.java)
1、new ServerSocket 打开端口
2、调ServerSocket的accept()等待客户连接,当连接成功返回交互的Socket。
3、调用Socket.getInputStream,getOutputStream获得服务器端的IO流
4、用处理流封装后与客户端交互,记住你读我写,一读一写。
5、关闭单一客户端调用Socket的close(),关闭服务器调ServerSocket的close();
Socket端编码步骤:(课堂代码:TestClient.java)
1、new Socket(Server ip,Server port)试图连接,如成功才有对象
2、其它参照server端的3,4,5步骤
3、关闭,只有Socket的close()方法。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -