把大一,大二,大三学习时的笔记整理下,有的是课本上的,还有的记不清了
1.字节解码成字符,字符编码成字节
2.序列化与持久化
对象序列化(实现Serializable接口),把对象序列化成流(或者反过来),方便存储即持久化(IO.JDBC)
多语言环境下,java序列化后存储的对象很难用其他语言还原出来,尽量使用通用的数据结构,json.xml.数据库
3.网络IO的数据传输问题
两条渠道:物理渠道(物理链路),精神渠道(通信协议)
工作机制:
程序A---->socket----->TCP----->IP------->端口------->应用程序B
数据传输:
OS(OutputStream)IS(InputStream),
SendQ<=====>RecvQ写入和读取均是通过OS和IS的缓存区域完成的,当RecvQ满了时,OS将会阻塞,知道RecvQ有足够的空间可以容纳
OS(SendQ)发送的数据,由于Client与Server两端均可以发送和接收收据,因此网络IO,不同于磁盘IO的是网络IO要有一个数据读取和写入的
协调过程,从而避免双方同时发送数据
4.字符转换
将多个单字节的字符通过编码来转换成一个多字节字符的过程中(单字节字符到多字节字符)减少的仅仅是字符串的长度,并没有减少字节数量
所以同样一个字符采用不同的编码进行存储,字节数会不同,如一个汉字再gbk里占两个字节,在utf-8里占三个字节