Sigh. This is crashy. You need to read the data immediately, but deliver it asynchronously. The easiest way to do that is to copy it into a temporary buffer.
```
OkBuffer b = new OkBuffer();
b.write(source, length);
pushDataLater(streamId, b, length, inFinished)
```
If you want to get very fancy you can use a loop which prevents you from having to buffer `length` bytes simultaneously:
```
  while (length > 0) {
    read up to length from source
    push that
    repeat
  }
```