17 Eylül 2018 Pazartesi

AsynchronousFileChannel Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.nio.channels.AsynchronousFileChannel;
import java.nio.channels.CompletionHandler;
Bu sınıfın kardeşi FileChannel sınıfıdır.

read(), write() gibi işlemlerden sonra CompletionHandler'ın çalışmasını sağlar.

open metodu
Örnek
Şöyle yaparız.
Path somePath = Paths.get("test.txt");
AsynchronousFileChannel channel = AsynchronousFileChannel.open(somePath,
  StandardOpenOption.READ);
Örnek
Şöyle yaparız.
String name = "delete.me";
Path path = new File(name).toPath();


AsynchronousFileChannel fc = AsynchronousFileChannel.open(path, 
  StandardOpenOption.CREATE_NEW, StandardOpenOption.DELETE_ON_CLOSE ,
  StandardOpenOption.READ, StandardOpenOption.WRITE,
  StandardOpenOption.WRITE, StandardOpenOption.SYNC);

read metodu
Şöyle yaparız.
ByteBuffer buf = ...;
channel.read(buf, 0, null, new CompletionHandler<Integer, Object>() {
  @Override
  public void completed(Integer bytesRead, Object attachment) {
    ...
  }

  @Override
  public void failed(Throwable exc, Object attachment) {
    ...
  }
});
write metodu
Şöyle yaparız. 3. parametre olan Attachment null veriliyor.
AtomicLong position = new AtomicLong(0);

AsynchronousFileChannel fc = ...;

CompletionHandler<Integer, Object> handler =
  new CompletionHandler<Integer, Object>() {
    @Override
    public void completed(Integer result, Object attachment) {
      position.getAndAdd(result);
    }
    @Override
    public void failed(Throwable e, Object attachment) {
        e.printStackTrace();
    }
  };

ByteBuffer bb = ...;
fc.write(bb,position.get(),null,handler);

Hiç yorum yok:

Yorum Gönder