We all are familiar with reading/writing file in a synchronous way. In Java 7 a new API was added to read/write the contents of the file asynchronously. The API is AsynchronousFileChannel.
also read:
In this example lets look at how to read the contents of the file asynchronously. There are two approaches to read the contents asynchronously:
1. To use Future class to wait for the result of the read operation.
2. To use a callback defined by the CompletionHandler to process the result of the Asynchronous operation.
//Using Future class to read the contents of the file. import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.AsynchronousFileChannel; import java.nio.charset.Charset; import java.nio.file.*; import java.util.concurrent.*; public class AsyncFutureRead { public static void main(String[] args) { //Buffer to read the contents from the file. ByteBuffer buffer = ByteBuffer.allocate(100); //The file to read the contents from. Path path = Paths.get('D:/tests/test.txt'); //Creating the asynchronous channel to the file which allows reading and writing of content. try(AsynchronousFileChannel asyncChannel = AsynchronousFileChannel.open(path)){ //Returns a Future instance which can be used to read the contents of the file. Future<Integer> fileResult = asyncChannel.read(buffer, 0); //Waiting for the file reading to complete. while(!fileResult.isDone()){ System.out.println('Waiting to complete the file reading ...'); } //Print the number of bytes read. System.out.println('Number of bytes read: '+fileResult.get()); //Reset the current position of the buffer to the beginning and the limit to the current position. buffer.flip(); //Decode the contents of the byte buffer. System.out.println('Contents of file: '); System.out.println(Charset.defaultCharset().decode(buffer)); }catch(IOException | InterruptedException | ExecutionException ex){ ex.printStackTrace(); } } }
Pro Java 7 NIO.2 addresses the three primary elements that offer new input/output (I/O) APIs in Java 7, giving you the skills to write robust, scalable Java applications.