`

NIO2 AsynchronousFileChannel

 
阅读更多
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

    ### 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 ...

    Java NIO 中英文版 + Pro Java 7 NIO.2

    `Pro Java 7 NIO.2`这本书由Anghel Leonard著,深入探讨了Java NIO.2 API,这是Java 7引入的进一步扩展,包括: 1. **文件系统API增强**:新增了AsynchronousFileChannel,支持异步文件操作,可以在后台线程中执行...

    JavaNIO2教程[定义].pdf

    Java NIO2,即New Input/Output,是Java在JDK 1.7引入的一组新的I/O API,是对原始Java I/O模型的扩展。它提供了比标准Java IO更为高效和灵活的I/O操作方式,特别是在处理大量并发I/O请求时,NIO2的异步特性显得尤为...

    Java I/O, NIO and NIO.2

    AsynchronousFileChannel是NIO.2中新增的异步I/O操作,可以在后台线程中执行I/O操作,从而避免阻塞主线程。Path接口和Files类提供了更方便的文件操作,如创建、删除、重命名文件,以及查询文件属性等。FileChannel...

    java nio 尚硅谷 12讲 new

    - Java NIO.2引入了异步I/O,即AsynchronousFileChannel和AsynchronousServerSocketChannel等,进一步提升了非阻塞I/O的效率。 在尚硅谷的12讲课程中,这些知识点将通过实例演示和详细解释,让学习者掌握Java NIO...

    PRO JAVA 7 NIO2

    《深入理解Java 7 NIO2:Path类的探索与应用》 在Java 7的NIO2(JSR203:Java平台上的更多新I/O API)更新中,`java.nio.file.Path` 类成为了核心组件之一,为开发者提供了更高效、更直观的文件系统操作接口。本文...

    java nio 异步编程源码

    2. **AsynchronousFileChannel**:用于异步文件操作。 3. **AsynchronousServerSocketChannel**:用于异步地接收连接请求。 4. **AsynchronousSocketChannel**:用于异步地发送和接收数据。 5. **CompletionHandler*...

    nio入门 IBM教材,pdf格式

    - **异步 I/O 实现**:通过 AsynchronousFileChannel 或 AsynchronousSocketChannel,可以实现非阻塞的文件或网络通信。 - **直接缓冲区的应用**:DirectByteBuffer 作为一种特殊类型的缓冲区,主要用于提高性能,...

    java nio示例代码

    8. **异步IO**:Java NIO也提供了异步文件操作,通过AsynchronousFileChannel可以异步读写文件,这样可以释放出线程去执行其他任务,提高程序效率。 通过上述示例代码,你可以了解到如何创建通道,如何创建和使用...

    Java NIO 中英文版

    - Java NIO还提供了异步I/O操作,通过AsynchronousFileChannel和AsynchronousSocketChannel等类实现,允许程序在等待I/O操作完成时执行其他任务。 7. **文件锁(File Locks)** - NIO提供了文件锁功能,可以在...

    NIO.2 入门,第 1 部分: 异步通道 API

    在Java编程领域,NIO.2(New IO 2,也称为Java NIO 2)是Java 7引入的一组新API,它扩展了Java的I/O功能,提供了更高效和灵活的输入输出操作。本篇文章将深入探讨NIO.2中的异步通道API,这些API允许我们进行非阻塞I/...

    ffc.zip_FileCopy_NIO_java nio

    此外,Java NIO还支持异步I/O操作,通过`AsynchronousFileChannel`类,可以在单独的线程中执行读写操作,提高并发性能。同时,NIO还包括选择器(Selector),允许单个线程管理多个通道,进一步提升了多路复用的能力...

    chacha.rar_NIO soclet java_java nio

    - **Java NIO2(Java 7引入的改进)**:增加了文件系统API,如AsynchronousFileChannel,进一步提升了文件操作的性能。 - **Java Channels and Streams**:Java 9引入了Channels和Streams的API,使得I/O操作更加...

    JavaNIO中(英)文书籍

    - **Java NIO.2**:自Java 7起,NIO得到了进一步增强,引入了新的Path、Files和Paths类,以及AsynchronousFileChannel,提供了异步文件I/O操作。 以上就是关于Java NIO的一些核心知识点,通过学习这两本《Java NIO...

    Java Nio ibm技术文档

    ### Java NIO (New Input/Output):IBM技术文档概览与详解 #### 一、引言 在Java开发领域,高效的数据输入输出处理一直是开发者关注的重点之一。随着JDK 1.4的发布,一个新的输入输出库——NIO(New Input/Output...

    JAVA NIO 全书 译稿

    Java NIO还引入了异步I/O操作,例如AsynchronousFileChannel和AsynchronousServerSocketChannel,它们允许在操作完成后再接收结果,而不是等待操作完成。这进一步提高了系统的并发性,特别是在处理大量并发请求时。 ...

    Java NIO文件操作深度解析:高效读写与代码实现

    Java NIO(New Input/Output)是Java提供的一种新的I/O操作方式,它在JDK 1.4中引入,极大地提高了文件操作的效率和灵活性。NIO与IO(Input/Output)相比,提供了更加丰富的API和更好的性能。本文将详细介绍Java NIO...

    Nio和Io的详细描述.docx

    - **异步文件通道(AsynchronousFileChannel)**:支持异步读写操作的文件通道。 **Java NIO概述** Java NIO的核心组件包括通道、缓冲区和选择器。此外,NIO还有许多其他类和组件,如文件通道、套接字通道、服务器...

    利用JDK7的NIO2.0进行I/O读写和监视

    它使用`java.nio.channels.AsynchronousFileChannel`类来实现,并且通过`Future`和`CompletionHandler`接口来处理异步操作的结果。 5. **Selectors and Channels**:虽然不是NIO2.0独有的,但在这个版本中,原有的...

    java的nio的使用示例分享

    Java 7引入的NIO.2提供了异步文件操作,如`java.nio.channels.AsynchronousFileChannel`。这种异步模式使得程序可以在执行其他任务的同时等待I/O操作完成,而不是阻塞等待。通过`AsynchronousFileChannel`的`read`...

Global site tag (gtag.js) - Google Analytics