src/main/java/com/github/davidmoten/rx/FileObservable.java
public final static Observable<byte[]> tailFile(File file, long startPosition,
            long sampleTimeMs, int chunkSize) {
        Preconditions.checkNotNull(file);
        Observable<Object> events = from(file, StandardWatchEventKinds.ENTRY_CREATE,
                StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.OVERFLOW)
                        // don't care about the event details, just that there
                        // is one
                        .cast(Object.class)
                        // get lines once on subscription so we tail the lines
                        // in the file at startup
                        .startWith(new Object());
        return tailFile(file, startPosition, sampleTimeMs, chunkSize, events);
    }
public final static Observable<byte[]> tailFile(File file, long startPosition,
            long sampleTimeMs, int chunkSize) {
        Preconditions.checkNotNull(file);
        Observable<Object> events = from(file, StandardWatchEventKinds.ENTRY_CREATE,
                StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.OVERFLOW)
                        // don't care about the event details, just that there
                        // is one
                        .cast(Object.class)
                        // get lines once on subscription so we tail the lines
                        // in the file at startup
                        .startWith(new Object());
        return tailFile(file, startPosition, sampleTimeMs, chunkSize, events);
    }
Returns an {@link Observable} that uses NIO {@link WatchService} (and a
dedicated thread) to push modified events to an observable that reads and
reports new sequences of bytes to a subscriber. The NIO
{@link WatchService} events are sampled according to
<code>sampleTimeMs</code> so that lots of discrete activity on a file
(for example a log file with very frequent entries) does not prompt an
inordinate number of file reads to pick up changes.

@param file
the file to tail
@param startPosition
start tailing file at position in bytes
@param sampleTimeMs
sample time in millis
@param chunkSize
max array size of each element emitted by the Observable. Is
also used as the buffer size for reading from the file. Try
{@link FileObservable#DEFAULT_MAX_BYTES_PER_EMISSION} if you
don't know what to put here.
@return observable of byte arrays