本文共 1161 字,大约阅读时间需要 3 分钟。
基于字节操作的I/O接口:inputStream和OutputStream基于字符操作的I/O接口:Writer和Reader基于磁盘操作的I/O接口:File基于网络操作的I/O接口:Socket
前两组主要是传输数据的数据个数,后两组主要是传输数据的方式。
不管是磁盘和网络传输,最小的存储单元都是字节
访问文件:调用read()接口, 操作系统检查在内核的高速缓存中有没有需要的数据,如果已经缓存,返回,没有则从磁盘中读取,然后缓存在操作系统的缓存中。
写入文件:write()接口,将数据从用户空间复制到内核地址空间的缓存中。完成
什么时候写入磁盘由操作系统决定,除非显式调用sync同步命令。应用程序直接访问磁盘数据,而不经过操作系统内核数据缓冲区。目的:减少数据从内核空间缓存到用户空间缓存的数据复制操作
数据的读取和写入都是同步操作的。
当访问数据的线程发出请求之后,线程会接着去处理其他事情
操作系统将内存中的某一块区域与磁盘中的文件关联起来,当要访问内存中的数据时,转换为访问文件中的数据。 目的:减少数据从内核空间缓存到用户空间缓存的数据复制操作
Java序列化就是将一个对象转化成一串二进制表示的字节数组,通过保存或转移这些字节数据来达到持久化的目的。
反序列化则是将这个字节数组再重新构造成对象,但必须
有原始类作为模板,才能还原。 总结: 1. 当父类基础Serializable接口时,所有子类都可以被序列化。 2. 子类实现了Serializable接口,父类没有,父类的属性不能被序列化, 但是在子类中属性仍能正确序列化。 3. 如果序列化的属性是对象,则这个对象也必须实现Serializable接口,否则会报错。 4. 在反序列化时,如果对象的属性有修改或删减,则修改的部分属性会丢失,但不会报错。 5. 在反序列化时,如果serialVersionUID被修改,则反序列化时会失败 6. 在多语言环境下,还是要尽量存储通用的数据结构,如JSON或者XML结构数据。网络带宽:一条物理链路在1s内能够传输的最大比特数,b/s
传输距离:数据在光纤中要走的距离 TCP拥塞控制Socket描述计算机之间完成相互通信的一种抽象功能
NIO关键类:Channel和Selector
Channel比作交通工具 Selector比作运行调度系统,负责监控同步与异步:
同步:一个任务的完成转载地址:http://lvqbx.baihongyu.com/