package com.java7developer.chapter2; import java.nio.*; import java.nio.channels.*; import java.nio.file.*; import java.io.IOException; public class Nio2ReadLargeLogFile implements CompletionHandler<Integer, AsynchronousFileChannel> { // need to keep track of the next position. int pos = 0; AsynchronousFileChannel channel = null; ByteBuffer buffer = null; public void completed(Integer result, AsynchronousFileChannel attachment) { // System.out.println("bytes num " + result); // if result is -1 means nothing was read. if (result != -1) { pos += result; // don't read the same text again. // your output command. //这里必须读取0,result直接的buffer,否则会读取到垃圾数据 System.out.print(new String(buffer.array(),0,result)); // buffer.clear(); // reset the buffer so you can read more. buffer.flip(); attachment.read(buffer, pos, attachment, this); } else { return; } // initiate another asynchronous read, with this. } public void failed(Throwable exc, AsynchronousFileChannel attachment) { System.err.println("Error!"); exc.printStackTrace(); } public void doit() { Path file = Paths.get("c:/a"); AsynchronousFileChannel channel = null; try { channel = AsynchronousFileChannel.open(file); } catch (IOException e) { System.err.println("Could not open file: " + file.toString()); System.exit(1); // yeah. heh. } buffer = ByteBuffer.allocate(1000); // start off the asynch read. channel.read(buffer, pos, channel, this); // this method now exits, thread returns to main and waits for user // input. } public static void main(String[] args) { Nio2ReadLargeLogFile tn = new Nio2ReadLargeLogFile(); tn.doit(); // wait fur user to press a key otherwise java exits because the // asynch thread isn't important enough to keep it running. try { System.in.read(); } catch (IOException e) { } } }
相关推荐
### JDK 7 NIO2 新特性详解 #### 引言 随着 Java 7 的发布,NIO (New I/O) 接口迎来了重要的更新,即 NIO.2 或称为 MNI (More New I/O)。NIO.2 增强了 Java 1.4 中的 NIO API,为开发人员提供了更为强大的 I/O ...
`Pro Java 7 NIO.2`这本书由Anghel Leonard著,深入探讨了Java NIO.2 API,这是Java 7引入的进一步扩展,包括: 1. **文件系统API增强**:新增了AsynchronousFileChannel,支持异步文件操作,可以在后台线程中执行...
Java NIO2,即New Input/Output,是Java在JDK 1.7引入的一组新的I/O API,是对原始Java I/O模型的扩展。它提供了比标准Java IO更为高效和灵活的I/O操作方式,特别是在处理大量并发I/O请求时,NIO2的异步特性显得尤为...
AsynchronousFileChannel是NIO.2中新增的异步I/O操作,可以在后台线程中执行I/O操作,从而避免阻塞主线程。Path接口和Files类提供了更方便的文件操作,如创建、删除、重命名文件,以及查询文件属性等。FileChannel...
- Java NIO.2引入了异步I/O,即AsynchronousFileChannel和AsynchronousServerSocketChannel等,进一步提升了非阻塞I/O的效率。 在尚硅谷的12讲课程中,这些知识点将通过实例演示和详细解释,让学习者掌握Java NIO...
《深入理解Java 7 NIO2:Path类的探索与应用》 在Java 7的NIO2(JSR203:Java平台上的更多新I/O API)更新中,`java.nio.file.Path` 类成为了核心组件之一,为开发者提供了更高效、更直观的文件系统操作接口。本文...
2. **AsynchronousFileChannel**:用于异步文件操作。 3. **AsynchronousServerSocketChannel**:用于异步地接收连接请求。 4. **AsynchronousSocketChannel**:用于异步地发送和接收数据。 5. **CompletionHandler*...
- **异步 I/O 实现**:通过 AsynchronousFileChannel 或 AsynchronousSocketChannel,可以实现非阻塞的文件或网络通信。 - **直接缓冲区的应用**:DirectByteBuffer 作为一种特殊类型的缓冲区,主要用于提高性能,...
8. **异步IO**:Java NIO也提供了异步文件操作,通过AsynchronousFileChannel可以异步读写文件,这样可以释放出线程去执行其他任务,提高程序效率。 通过上述示例代码,你可以了解到如何创建通道,如何创建和使用...
- Java NIO还提供了异步I/O操作,通过AsynchronousFileChannel和AsynchronousSocketChannel等类实现,允许程序在等待I/O操作完成时执行其他任务。 7. **文件锁(File Locks)** - NIO提供了文件锁功能,可以在...
在Java编程领域,NIO.2(New IO 2,也称为Java NIO 2)是Java 7引入的一组新API,它扩展了Java的I/O功能,提供了更高效和灵活的输入输出操作。本篇文章将深入探讨NIO.2中的异步通道API,这些API允许我们进行非阻塞I/...
此外,Java NIO还支持异步I/O操作,通过`AsynchronousFileChannel`类,可以在单独的线程中执行读写操作,提高并发性能。同时,NIO还包括选择器(Selector),允许单个线程管理多个通道,进一步提升了多路复用的能力...
- **Java NIO2(Java 7引入的改进)**:增加了文件系统API,如AsynchronousFileChannel,进一步提升了文件操作的性能。 - **Java Channels and Streams**:Java 9引入了Channels和Streams的API,使得I/O操作更加...
- **Java NIO.2**:自Java 7起,NIO得到了进一步增强,引入了新的Path、Files和Paths类,以及AsynchronousFileChannel,提供了异步文件I/O操作。 以上就是关于Java NIO的一些核心知识点,通过学习这两本《Java NIO...
### Java NIO (New Input/Output):IBM技术文档概览与详解 #### 一、引言 在Java开发领域,高效的数据输入输出处理一直是开发者关注的重点之一。随着JDK 1.4的发布,一个新的输入输出库——NIO(New Input/Output...
Java NIO还引入了异步I/O操作,例如AsynchronousFileChannel和AsynchronousServerSocketChannel,它们允许在操作完成后再接收结果,而不是等待操作完成。这进一步提高了系统的并发性,特别是在处理大量并发请求时。 ...
Java NIO(New Input/Output)是Java提供的一种新的I/O操作方式,它在JDK 1.4中引入,极大地提高了文件操作的效率和灵活性。NIO与IO(Input/Output)相比,提供了更加丰富的API和更好的性能。本文将详细介绍Java NIO...
- **异步文件通道(AsynchronousFileChannel)**:支持异步读写操作的文件通道。 **Java NIO概述** Java NIO的核心组件包括通道、缓冲区和选择器。此外,NIO还有许多其他类和组件,如文件通道、套接字通道、服务器...
它使用`java.nio.channels.AsynchronousFileChannel`类来实现,并且通过`Future`和`CompletionHandler`接口来处理异步操作的结果。 5. **Selectors and Channels**:虽然不是NIO2.0独有的,但在这个版本中,原有的...
Java 7引入的NIO.2提供了异步文件操作,如`java.nio.channels.AsynchronousFileChannel`。这种异步模式使得程序可以在执行其他任务的同时等待I/O操作完成,而不是阻塞等待。通过`AsynchronousFileChannel`的`read`...