diff options
| author | Szymon Szukalski <szymon.szukalski@gmail.com> | 2012-10-03 10:45:23 +1000 |
|---|---|---|
| committer | Szymon Szukalski <szymon.szukalski@gmail.com> | 2012-10-03 10:45:23 +1000 |
| commit | 6ddaaf8555d6b94684d061289249cac67c6eb09f (patch) | |
| tree | ab4041586a70dcd1140cb32263c71354c2901e2b /src/main/java/io/skas/melbjvm/nio2/AsynchronousFileReader.java | |
| parent | 9c632725afb73bbf0966e52ca50c6d66c12d853b (diff) | |
Added example of SimpleFileVisitor usage
Diffstat (limited to 'src/main/java/io/skas/melbjvm/nio2/AsynchronousFileReader.java')
| -rw-r--r-- | src/main/java/io/skas/melbjvm/nio2/AsynchronousFileReader.java | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/main/java/io/skas/melbjvm/nio2/AsynchronousFileReader.java b/src/main/java/io/skas/melbjvm/nio2/AsynchronousFileReader.java index ff7c82b..273ddc5 100644 --- a/src/main/java/io/skas/melbjvm/nio2/AsynchronousFileReader.java +++ b/src/main/java/io/skas/melbjvm/nio2/AsynchronousFileReader.java @@ -18,7 +18,6 @@ public class AsynchronousFileReader implements CompletionHandler<Integer, ByteBu public static final Logger LOG = LoggerFactory.getLogger(AsynchronousFileReader.class); public static final int BYTES_IN_MEGABYTE = 1048576; - private Long position; private Path path; private ByteBuffer buffer; @@ -36,31 +35,41 @@ public class AsynchronousFileReader implements CompletionHandler<Integer, ByteBu } private void openChannel() { + try { this.asynchronousFileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.READ); } catch (IOException e) { e.printStackTrace(); } + } private void closeChannel() { + try { this.asynchronousFileChannel.close(); } catch (IOException e) { e.printStackTrace(); } + } private void readChannel(long position) { + asynchronousFileChannel.read(buffer, position, buffer, this); + } @Override public void completed(Integer result, ByteBuffer buffer) { + if (result < 0) { + closeChannel(); LOG.debug("read: {} megabytes", position / BYTES_IN_MEGABYTE); + } else { + position += result; if (buffer.hasRemaining()) { readChannel(position); @@ -70,12 +79,16 @@ public class AsynchronousFileReader implements CompletionHandler<Integer, ByteBu buffer.clear(); this.readChannel(position); } + } + } @Override public void failed(Throwable exc, ByteBuffer buffer) { + LOG.error("read failed: {}", exc.getMessage()); exc.printStackTrace(); + } } |
