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

简介: Java 的I/O类库的基本结构基于字节操作的I/O接口:inputStream和OutputStream基于字符操作的I/O接口:Writer和Reader基于磁盘操作的I/O接口:File基于网络操作的I/O接口:Socket前两组主要是传输数据的数据个数,后两组主要是传输数据的方式。

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

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

目录
相关文章
|
14天前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
35 1
|
17天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
34 2
|
17天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
48 2
|
18天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
12 2
|
28天前
|
人工智能 前端开发
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
|
29天前
|
存储 安全 数据库
后端技术在现代Web开发中的实践与创新
【10月更文挑战第13天】 本文将深入探讨后端技术在现代Web开发中的重要性,通过实际案例分析展示如何利用先进的后端技术提升用户体验和系统性能。我们将从基础架构设计、数据库优化、安全性保障等方面展开讨论,为读者提供清晰的指导和实用的技巧。无论是新手开发者还是经验丰富的技术人员,都能从中获得启发和帮助。
33 2
|
30天前
|
机器学习/深度学习 移动开发 JavaScript
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
124 0
|
1月前
|
自然语言处理 Cloud Native 数据安全/隐私保护
后端技术在现代Web开发中的实践与创新
本文探讨了后端技术在现代Web开发中的重要性及其应用。通过分析当前流行的后端框架和开发模式,揭示了如何利用这些技术来构建高效、可扩展的Web应用程序。同时,文章也讨论了未来后端技术的发展趋势,为开发者提供了一些启示。
|
18天前
|
监控 前端开发 JavaScript
前端技术探索:构建高效、可维护的Web应用
【10月更文挑战第23天】前端技术探索:构建高效、可维护的Web应用
36 0
|
22天前
|
存储 Java 编译器
[Java]基本数据类型与引用类型赋值的底层分析
本文详细分析了Java中不同类型引用的存储方式,包括int、Integer、int[]、Integer[]等,并探讨了byte与其他类型间的转换及String的相关特性。文章通过多个示例解释了引用和对象的存储位置,以及字符串常量池的使用。此外,还对比了String和StringBuilder的性能差异,帮助读者深入理解Java内存管理机制。
18 0

热门文章

最新文章