集册 Java实例教程 在AsynchronousFileChannel中完成写入操作之前阻止

在AsynchronousFileChannel中完成写入操作之前阻止

欢马劈雪     最近更新时间:2020-01-02 10:19:05

439
在AsynchronousFileChannel中完成写入操作之前阻止
/* 来 自 nowjava.com - 时代Java*/

import java.io.IOException;

import java.nio.ByteBuffer;

import java.nio.channels.AsynchronousFileChannel;

import java.nio.channels.CompletionHandler;

import java.nio.channels.WritePendingException;

import java.nio.file.Paths;

import java.nio.file.StandardOpenOption;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.Future;


public class Main {


  public static void main(String[] args) {

    try (AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(Paths.get("/home/docs/asynchronous.txt"),

        StandardOpenOption.READ, StandardOpenOption.WRITE, StandardOpenOption.CREATE)) {

      CompletionHandler<Integer, Object> handler = new CompletionHandler<Integer, Object>() {


        @Override

        public void completed(Integer result, Object attachment) {

          System.out.println("Attachment: " + attachment + " " + result + " bytes written");//来 自 时   代    Java - nowjava.com

          System.out.println("CompletionHandler Thread ID: " + Thread.currentThread().getId());

        }


        @Override

        public void failed(Throwable e, Object attachment) {

          System.err.println("Attachment: " + attachment + " failed with:");

          e.printStackTrace();

        }

      };


      Future<Integer> writeFuture1 = fileChannel.write(ByteBuffer.wrap("Sample".getBytes()), 0);

      Future<Integer> writeFuture2 = fileChannel.write(ByteBuffer.wrap("Box".getBytes()), 0);


      int result;

      try {

        result = writeFuture1.get();

        System.out.println("Sample write completed with " + result + " bytes written");

        result = writeFuture2.get();

        System.out.println(
展开阅读全文