`
youyu4
  • 浏览: 441836 次
社区版块
存档分类
最新评论
文章列表

java NIO 之 Pipe

java NIO 之 Pipe     Java NIO Pipe是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。   Pipe原理的图示:                  Pipe的特点         Pipe 提供一种机制,可以按照写入的顺序读取数据。 Pipe.SinkChannel用来向管道写入数据,而Pipe.SourceChannel用来从管道读取数据   例子: package cn.outofmemory.nio.channels; import java.io ...
java NIO 之 DatagramChannel     Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。       打开 DatagramChannel     DatagramChannel channel = ...
java NIO 之 ServerSocketChannel     Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。   代码例子: ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.socket().bind(new InetSocketAddress(99 ...
java NIO 之 SocketChannel     Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:   打开一个SocketChannel并连接到互联网上的某台服务器。 一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。     打开 SocketChannel     SocketChannel socketChannel = SocketChannel.open(); socketChannel.connect(new I ...
java NIO 之 FileChannel     Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。   FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。       打开FileChannel   在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来获取一个FileChannel实例。下面是通过RandomAccessFile打开FileChannel的示例: ...
java NIO 之 Selector     Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。       为什么使用Sel ...
java NIO 之 通道之间的数据传输         在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(通道)传输到另外一个channel。       transferFrom()   FileChannel的transferFrom()方法可以将数据从源通道 ...
java NIO 之 Scatter/Gather         Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(通道)中读取或者写入到Channel的操作。   分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。 聚集(gather)写入Channel是指在写操作时将多个buffer的数据写入同一个Channel,因此,Channel 将多个Buffer中的数据“聚集(gath ...

java NIO 之 Buffer

java NIO 之 Buffer   Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。   缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。       Buffer的基本用法   Buffer读写数据的步骤:   写入数据到Buffer 调用flip()方法 从Buffer中读取数据 调用clear()方法或者compact()方法       当向buffer写入数据时,buffer会记录 ...
java NIO 之 Channel     java NIO和流类似,但还是有所区别   既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的 通道可以异步地读写 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入 从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:     Channel的实现   FileChannel:从文件中读写数据。 DatagramChannel:能通过UDP读写网络中的数据。 SocketChannel:能通过TCP读写网络中的数据。 ServerSocketChannel ...

java NIO 之 基础

java NIO 之 基础     Java NIO 由以下几个核心部分组成:   Channels Buffers Selectors       虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。         Channel 和 Buffer   基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel读到Buffer中,也可以从 ...
java NIO 之 NIO与IO     Java NIO和IO的主要区别     IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 Selector     面向流与面向缓冲   面向流:例如文件和程序之间有一个通道,像水流一样 ...
Socket 和 http 的区别     HTTP          超文本传输协议,首先它是一个协议,并且是基于TCP/IP协议基础之上的应用层协议。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,HTTP是应用层协议,主要解决如何包装数据。HTTP协议详细规定了浏览器与服务器之间相互通信的规则,是万维网交换信息的基础。HTTP是基于请求-响应形式并且是短连接,并且是无状态的协议。针对其无状态特性,在实际应用中又需要有状态的形式,因此一般会通过session/cookie技术来解决此问题。     Http请求的协议   http协议 基于http协议 ...
java socket编程(实践)     InetAddress   InetAddress类用于标识网络上的硬件资源,标识互联网协议(IP)地址。(该类没有构造方法)     //获取本机的InetAddress实例 InetAddress address =InetAddress.getLocalHost(); address.getHostName();//获取计算机名 address.getHostAddress();//获取IP地址 byte[] bytes = address.getAddress();//获取字节数组形式的IP地址,以点分隔的四部分 ...
java socket编程(理论)   网络编成的两个主要问题   如何准确的定位网络上一台或多台主机 找到主机后如何可靠高效的进行数据传输       在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。     实现方式 通过HTTP协议传输数据,因为HTTP属于应用层,所以我们可以通过该协议,进行一次短连接,然后传输数据。 通过Socket进行数据传输,S ...
Global site tag (gtag.js) - Google Analytics