博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入分析Java Web技术内幕(三)
阅读量:5817 次
发布时间:2019-06-18

本文共 1161 字,大约阅读时间需要 3 分钟。

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. 尽量减少编码: 因数据都是字符 需要转字节

同步与异步:

同步:一个任务的完成

转载地址:http://lvqbx.baihongyu.com/

你可能感兴趣的文章
(十二) 整合spring cloud云架构 - SSO单点登录之OAuth2.0 登出流程(3)
查看>>
java B2B2C Springcloud仿淘宝电子商城系统- Gateway运行时动态配置网关
查看>>
java B2B2C springmvc mybatis电子商务平台源码-------zuul网关实现
查看>>
SpringCloud之断路器监控(Hystrix Dashboard)(九)
查看>>
我的友情链接
查看>>
Linux中inittab剖析
查看>>
基于ARM的智能灯光控制系统(5)设备链表
查看>>
layDate时间控件-使用记录_已迁移
查看>>
我的友情链接
查看>>
2. PowerShell -- 脚本执行权限
查看>>
有时OPEN***提示报错,如下错误及解决方法
查看>>
在nginx当中遇到的问题
查看>>
JAVA中重写equals()方法为什么要重写hashcode()方法?
查看>>
压力测试之siege
查看>>
linux系统中挂载windows中的共享文件
查看>>
看过这张图你还记不牢JavaScript的语法和特性,算我输!
查看>>
LDAP落地实战(一):OpenLDAP部署及管理维护
查看>>
Spring Web工程web.xml零配置即使用Java Config + Annotation
查看>>
我的友情链接
查看>>
详解Windows XP中可以被禁用的服务
查看>>