/* Copyright (c) 2007 Jython Developers */
package org.python.core.io;
import java.nio.ByteBuffer;
/**
* Base class for buffered I/O objects.
*
* @author Philip Jenvey
*/
public abstract class BufferedIOBase extends IOBase {
/**
* Read and return up to size bytes, contained in a ByteBuffer.
*
* ByteBuffers returned from read are already flip()'d.
*
* Returns an empty ByteBuffer on EOF
*
* @param size the number of bytes to read
* @return a ByteBuffer containing the bytes read
*/
public ByteBuffer read(int size) {
if (size < 0) {
return readall();
}
ByteBuffer bytes = ByteBuffer.allocate(size);
readinto(bytes);
// flip()ing here is more convenient as there's no real use
// case for appending to buffers returned from read. readinto
// doesn't/shouldn't flip()
bytes.flip();
return bytes;
}
/**
* Read until EOF.
*
* @return a ByteBuffer containing the bytes read
*/
public ByteBuffer readall() {
unsupported("readall");
return null;
}
/**
* Read up to bytes.remaining() bytes into the given ByteBuffer.
*
* Returns number of bytes read (0 for EOF).
*
* @param bytes a ByteBuffer to read bytes into
* @return the amount of data read as an int
*/
public int readinto(ByteBuffer bytes) {
unsupported("readinto");
return -1;
}
/**
* Write the given ByteBuffer to the IO stream.
*
* Returns the number of bytes written, which may be less than
* bytes.remaining().
*
* @param bytes a ByteBuffer value
* @return the number of bytes written as an int
*/
public int write(ByteBuffer bytes) {
unsupported("write");
return -1;
}
/**
* Returns buffered bytes without advancing the position.
*
* The argument indicates a desired minimal number of bytes; we do
* at most one raw read to satisfy it. We never return more than
* the size of the underlying buffer;
*
* @param size the minimal number of bytes as an int
* @return a ByteBuffer containing the bytes read
*/
public ByteBuffer peek(int size) {
unsupported("peek");
return null;
}
/**
* Reads up to bytes.remaining() bytes.
*
* Returns up to bytes.remaining() bytes. If at least one byte is
* buffered, we only return buffered bytes. Otherwise, we do one
* raw read.
*
* @param bytes a ByteBuffer to read bytes into
* @return the amount of data read as an int
*/
public int read1(ByteBuffer bytes) {
unsupported("read1");
return -1;
}
/**
* Return true if this objects buffer contains any data.
*
* @return boolean whether or not any data is currently buffered
*/
public boolean buffered() {
unsupported("buffered");
return false;
}
/**
* Clear the read buffer if one exists.
*
*/
public void clear() {
unsupported("clear");
}
}