深入分析Java I/O的工作机制

2.2.3 Java序列化技术

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

ps:纯java环境下,序列化能很好的工作,但是在多语言环境下,尽量存储通用数据结构,如JSON或XML。

2.3 网络I/O工作机制

    2.3.2影响网络传输的因素:

    网络带宽,传输距离,TCP拥塞控制。

    2.3.3 Java Socket的工作机制

        socket比作两个城市之间的交通工具。Socket有多种,大部分情况下我们都用基于TCP/IP的流套接字,它是一种稳定的通信协议。

    不同主机之上不同应用程序之间的通信必须通过Socket建立连接,而建立Socket连接必须由底层TCP/IP协议来建立TCP连接。建立TCP连接需要底层IP协议来寻址网络中的主机IP。然后通过TCP或UPD的地址也就是端口号来指定主机上特定的应用程序。这样就可以通过一个Socket实例唯一代表一个主机上的应用程序的通信链路了。

    2.3.4 建立通信链路

    客户端:

                1.创建Socket实例,操作系统为其分配端口号,并创建一个包含本地和远程地址和端口号的套接字数据结构。

                 2.在创建Socket实例的构造函数正确返回之前,进行TCP的三次握手协议,完成后才创建完成Socket实例对象,否则报IOException。

    服务端:

                1.创建ServerSocket实例。同时操作系统为其创建一个底层数据结构,其中包含指定监听的端口号和包含监听地址的通配符(通常都为“*”,即监听所有地址)

                 2.调用accept()方法时,进入阻塞状态,等待客户端请求。

                 3.请求到来,为这个链接创建一个新的套接字数据结构,该结构信息包含的地址和端口信息正是请求源地址和端口。

                  4.等待客户端三次握手后,这个服务端的Socket实例才返回。 

    2.3.5 数据传输

        数据传输是建立连接的主要目的。

       连接建立成功后,客户端和服务端都有一个Socket实例,每个实例都有一个InputStream和OutputStream,通过这两个对象来交换数据。创建Socket对象时,操作系统为InputStream和OutputStream分别分配一定大小的缓存区,数据的写入和读取都是通过这个缓存区完成。






你可能感兴趣的:(深入分析Java,Web技术内幕)