-
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-BIO、NIO、AIO 详解
流的概念和作用
流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象。
流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
流的作用:为数据源和目的地建立一个输送通道。
Java 中将输入输出抽象称为流,就好像水管,将两个容器连接起来。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流。
...
2018-09-22 04:20:47 |
Java
-
Java NIO-10-大文件读取
背景
直接将文件全部加载到内存,就时候是行不通的。
比如一个文件特别大,直接占用了 2G 的内存,或者相对较大,500M 但是读取不频繁,用户不希望占用太多的内存。
那该怎么办呢?
报错:
五月 06, 2022 10:51:53 上午 org.jboss.netty.channel.socket.nio.AbstractNioSelector
警告: Unexpected exc...
2018-09-22 04:20:47 |
Java
-
Java NIO-09-零拷贝之 Splice
splice()
splice() 是 Linux 中与 mmap() 和 sendfile() 类似的一种方法。
它也可以用于用户应用程序地址空间和操作系统地址空间之间的数据传输。
splice() 适用于可以确定数据传输路径的用户应用程序,它不需要利用用户地址空间的缓冲区进行显式的数据传输操作。
那么,当数据只是从一个地方传送到另一个地方,过程中所传输的数据不需要经过用户应...
2018-09-22 04:20:47 |
Java
-
Java NIO-09-零拷贝之 Sendfile
sendfile()
为了简化用户接口,同时还要继续保留 mmap()/write() 技术的优点:
减少 CPU 的拷贝次数,Linux 在版本 2.1 中引入了 sendfile() 这个系统调用。
sendfile() 不仅减少了数据拷贝操作,它也减少了上下文切换。
首先:sendfile() 系统调用利用 DMA 引擎将文件中的数据拷贝到操作系统内核缓冲区中,然后数据被拷贝到...
2018-09-22 04:20:47 |
Java
-
Java NIO-09-零拷贝之 MMAP
MMAP
在 Linux 中,减少拷贝次数的一种方法是调用 mmap() 来代替调用 read,比如:
tmp_buf = mmap(file, len);
write(socket, tmp_buf, len);
流程
首先,应用程序调用了 mmap() 之后,数据会先通过 DMA 拷贝到操作系统内核的缓冲区中去。
接着,应用程序跟操作系统共享这个缓冲区,这样,操作系统内核和...
2018-09-22 04:20:47 |
Java