深入分析Java Web技术内幕(三)

来源:互联网 发布:淘宝pr剪切教程 编辑:程序博客网 时间:2024/06/09 15:50

Java 的I/O类库的基本结构

基于字节操作的I/O接口:inputStream和OutputStream基于字符操作的I/O接口:Writer和Reader基于磁盘操作的I/O接口:File基于网络操作的I/O接口:Socket

前两组主要是传输数据的数据个数,后两组主要是传输数据的方式。

不管是磁盘和网络传输,最小的存储单元都是字节

标准访问文件方式

访问文件:调用read()接口, 操作系统检查在内核的高速缓存中有没有需要的数据,如果已经缓存,返回,没有则从磁盘中读取,然后缓存在操作系统的缓存中。

写入文件:write()接口,将数据从用户空间复制到内核地址空间的缓存中。完成
什么时候写入磁盘由操作系统决定,除非显式调用sync同步命令。

直接I/O的方式

应用程序直接访问磁盘数据,而不经过操作系统内核数据缓冲区。目的:减少数据从内核空间缓存到用户空间缓存的数据复制操作

同步访问文件方式

数据的读取和写入都是同步操作的。

异步访问文件的方式

当访问数据的线程发出请求之后,线程会接着去处理其他事情

内存映射的方式

操作系统将内存中的某一块区域与磁盘中的文件关联起来,当要访问内存中的数据时,转换为访问文件中的数据。 目的:减少数据从内核空间缓存到用户空间缓存的数据复制操作

Java序列化技术

Java序列化就是将一个对象转化成一串二进制表示的字节数组,通过保存或转移这些字节数据来达到持久化的目的。

反序列化则是将这个字节数组再重新构造成对象,但必须
有原始类作为模板,才能还原。
总结:
1. 当父类基础Serializable接口时,所有子类都可以被序列化。
2. 子类实现了Serializable接口,父类没有,父类的属性不能被序列化,
但是在子类中属性仍能正确序列化。
3. 如果序列化的属性是对象,则这个对象也必须实现Serializable接口,否则会报错。
4. 在反序列化时,如果对象的属性有修改或删减,则修改的部分属性会丢失,但不会报错。
5. 在反序列化时,如果serialVersionUID被修改,则反序列化时会失败
6. 在多语言环境下,还是要尽量存储通用的数据结构,如JSON或者XML结构数据。

影响网络传输的因素

网络带宽:一条物理链路在1s内能够传输的最大比特数,b/s
传输距离:数据在光纤中要走的距离
TCP拥塞控制

Socket描述计算机之间完成相互通信的一种抽象功能

NIO

NIO关键类:Channel和Selector
Channel比作交通工具
Selector比作运行调度系统,负责监控

网络I/O优化

  1. 减少网络交互的次数
  2. 减少网络传输数据量的大小:将数据压缩后再传输
  3. 尽量减少编码: 因数据都是字符 需要转字节

同步与异步:
同步:一个任务的完成

原创粉丝点击