If the buffer is a heap buffer, take() should use copyOfRange() to avoid useless array clearing
Revert unsafe part of lazy NIO patch (which is basically all of the meat, leaving the extra goodies)