个人简介

Echo Blog


江湖无名 安心练剑
  • Java Net-05-死锁
    基础原理 首先需要明白数据传输的底层实现机制,在上一章中有详细的介绍,我们提到了 SendQ 和 RecvQ 缓冲队列,这两个缓冲区的容量在具体实现时会受一定的限制,虽然它们使用的实际内存大小会动态地增长和收缩,但还是需要一个硬性的限制,以防止行为异常的程序所控制的单一 TCP 连接将系统的内存全部消耗。 正是由于缓冲区的容量有限,它们可能会被填满,事实也正是如此,如果与 TCP 的流量...
    2018-09-23 01:35:05 | Java
  • Java Net-05-TCP Socket 底层原理与生命周期
    数据传输的底层实现 数据结构 如果不理解套接字的具体实现所关联的数据结构和底层协议的工作细节,就很难抓住网络编程的精妙之处,对于 TCP 套接字来说,更是如此。 套接字所关联的底层的数据结构集包含了特定 Socket 实例所关联的信息。 比附,套接字结构除其他信息外还包含: 该套接字所关联的本地和远程互联网地址和端口号。 一个 FIFO(Firs...
    2018-09-23 01:35:05 | Java
  • Java Net-04-TCP Socket NIO 方式实现
    TCP Socket NIO 基础知识 NIO 采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的 I/O,即在等待连接、读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候,程序也可以做其他事情,以实现线程的异步操作。 考虑一个即时消息服务器,可能有上千个客户端同时连接到服务器,但是在任何时刻只有非常少量的消息需要读取和分发(如果采用线程...
    2018-09-23 01:35:05 | Java
  • Java Net-03-TCP Socket
    TCP Socket TCP 协议 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析。 TCP/IP 协议族有 IP 协议、TCP 协议和 UDP 协议。现在 TCP/IP 协议族中的主要 socket 类型为流套接字(使用 TCP 协议)和数据报套接字(使用 UDP 协议)。 TCP 协议提供面向连接的服务,通...
    2018-09-23 01:35:05 | Java
  • Java Net-02-InetAddress
    基础知识 IP 地址 IP地址是由IP使用的32位或128位无符号数字,IP是一种较低级别的协议,UDP和TCP等协议都是在此基础上构建的。 IP地址体系结构由RFC 790:分配号、RFC 1918:私有internet的地址分配、RFC 2365:管理作用域的IP组播和RFC 2373: IP版本6寻址体系结构定义。 InetAddress的实例由IP地址和相应的主机名组成(取决...
    2018-09-23 00:51:50 | Java
  • Java Net-01-Overview
    网络编程 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 网络编程模型 目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出...
    2018-09-22 23:38:14 | Java
  • Java NIO-10-大文件读取
    背景 直接将文件全部加载到内存,就时候是行不通的。 比如一个文件特别大,直接占用了 2G 的内存,或者相对较大,500M 但是读取不频繁,用户不希望占用太多的内存。 那该怎么办呢? RandomAccessFile-获取指定范围的字符串 /** * 获取对应的字符串 * @param filePath 文件 * @param startIndex 开始下标 * @param...
    2018-09-22 04:20:47 | Java
  • Java NIO-09-零拷贝之 Splice
    splice() splice() 是  Linux  中与 mmap() 和  sendfile() 类似的一种方法。 它也可以用于用户应用程序地址空间和操作系统地址空间之间的数据传输。 splice() 适用于可以确定数据传输路径的用户应用程序,它不需要利用用户地址空间的缓冲区进行显式的数据传输操作。 那么,当数据只是从一个地方传送到另一个地方,过程中所传输的数据不需要经过用户应...
    2018-09-22 04:20:47 | Java