Java Async I/O
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Java Async I/O

The main purpose of this project is to enable async interaction with the existing, sync, InputStream and OutputStream primitives in Java.

All I/O operations are performed on the ForkJoinPool thread pool. A CompletableFuture is returned from each async operation, so that it can be continued from.


Input operations never block as long as the InputStream implementation correctly reports its available bytes.


Output operations are not guaranteed to be non-blocking because OutputStream doesn't report its availability.


This async stack is based on a generic facility, WhenReady, that can be used for other kinds of async execution.

WhenReady takes a ready predicate eventually along with an action function, a result value, and/or a done predicate. When the ready predicate returns true, WhenReady may assign the result, it may execute the action once, or it may start executing the action in a loop until the done predicate returns true.


You'll find articles in the docs folder in this source tree.

Or, you may jump straight to the API Reference


If you don't find an answer for your question, please send an email to Zlatko Michailov.

Building the Sources

This project uses Gradle to automate the build and test process.

gradle java

Running the Tests

gradle test

Preparing for Eclipse

gradle eclipse

Referencing the Package

Include these sectons in your build.gradle script:

repositories {
    maven {
        url ""

dependencies {
    compile 'michailov:async-io:0.4'