Java NIO Channel [ 转载 ]

Java NIO Channel [ 转载 ]

@author Java NIO系列教程(二) Channel

Java NIO的通道类似流,但又有些不同:

  • 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。
  • 通道可以异步地读写。
  • 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:

Channel的实现

这些是Java NIO中最重要的通道的实现:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

FileChannel 从文件中读写数据。

DatagramChannel 能通过UDP读写网络中的数据。

SocketChannel 能通过TCP读写网络中的数据。

ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。

基本的 Channel 示例

下面是一个使用FileChannel读取数据到Buffer中的示例:

RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
FileChannel inChannel = aFile.getChannel();

ByteBuffer buf = ByteBuffer.allocate(48);

int bytesRead = inChannel.read(buf);
while (bytesRead != -1) {

System.out.println("Read " + bytesRead);
buf.flip();

while(buf.hasRemaining()){
System.out.print((char) buf.get());
}

buf.clear();
bytesRead = inChannel.read(buf);
}
aFile.close();

注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节。

时间: 2024-07-30 23:55:16

Java NIO Channel [ 转载 ]的相关文章

Java NIO Channel之FileChannel [ 转载 ]

Java NIO Channel之FileChannel [ 转载 ] @author zachary.guo 对于文件 I/O,最强大之处在于异步 I/O(asynchronous I/O),它允许一个进程可以从操作系统请求一个或多个 I/O 操作而不必等待这些操作的完成.发起请求的进程之后会收到它请求的 I/O 操作已完成的通知.异步 I/O 是一种高级性能,当前的很多操作系统都还不具备.因此,文件通道在多数情况下来说总是阻塞式的,因此不能被置于非阻塞模式. FileChannel 对象不能

Java NIO Channel

Java Nio 1 Java NIO Tutorial 2 Java NIO Overview 3 Java NIO Channel 4 Java NIO Buffer 5 Java NIO Scatter / Gather 6 Java NIO Channel to Channel Transfers 7 Java NIO Selector 8 Java NIO FileChannel 9 Java NIO SocketChannel 10 Java NIO ServerSocketChan

Java NIO Channel to Channel Transfers

Java Nio 1 Java NIO Tutorial 2 Java NIO Overview 3 Java NIO Channel 4 Java NIO Buffer 5 Java NIO Scatter / Gather 6 Java NIO Channel to Channel Transfers 7 Java NIO Selector 8 Java NIO FileChannel 9 Java NIO SocketChannel 10 Java NIO ServerSocketChan

Java NIO try-with-resources [ 转载 ]

Java NIO try-with-resources [ 转载 ] @原文链接 http://blog.csdn.net/jackiehff/article/details/17765909     try-with-resources语句是一个声明一个或多个资源的 try 语句.一个资源作为一个对象,必须在程序结束之后随之关闭. try-with-resources语句确保在语句的最后每个资源都被关闭 .任何实现了 java.lang.AutoCloseable的对象, 包括所有实现了 ja

【JAVA】【NIO】6、Java NIO Channel to Channel Transfers

在Java NIO中,如果其中有一个channel是FileChannel,你可以直接将数据从一个channel传递到另一个channel.FileChannel类有一个transferTo和一个transferFrom方法可以做到. transferFrom() 该方法将数据从一个源channel传递到FileChannel. 实例: 参数position和count,表明在目标文件中,从哪个位置开始写,最大传输多少字节(count)数据.如果源channel里的数据少于count字节,那么传

【JAVA】【NIO】3、Java NIO Channel

Java NIO和流量相似,但有些差异: ·通道可读写,流仅支持单向.读或写 ·异步通道读取 ·通道读写器,他们是和Buffer交替 道的实现 下面是Java NIO中最重要的通道的实现: ·FileChannel ·DatagramChannel ·SocketChannel ·ServerSocketChannel FileChannel从文件读数据或写进文件 DatagramChannel通过UDP在网络上读写数据 SocketChannel通过TCP在网络上读写数据 ServerSock

Java NIO (2) Channel

Java NIO Channel Java NIO Channels are similar to streams with a few differences: You can both read and write to a Channels. Streams are typically one-way (read or write). Channels can be read and written asynchronously. Channels always read to, or w

Java NIO (5) Channel to Channel Transfers

Java NIO Channel to Channel Transfers In Java NIO you can transfer data directly from one channel to another, if one of the channels is a FileChannel. The FileChannel class has a transferTo() and a transferFrom() method which does this for you. trans

Java NIO(一)

http://wiki.jikexueyuan.com/project/java-nio-zh/java-nio-overview.html Java NIO,Non-blocking IO 02. Java NIO 概览 NIO包含下面几个核心的组件: Channels Buffers Selectors 通过Channel,我们即可以从Channel把数据写到Buffer中,也可以吧数据冲Buffer写入到Channel 有很多的Channel,Buffer类型.下面列举了主要的几种: Fi