The Java Developers Almanac 1.4


Order this book from Amazon.

   
Home > List of Packages > java.nio  [27 examples] > Files  [7 examples]

e169. Reading from a Channel with a ByteBuffer

This example uses a ByteBuffer to read from a channel. The tricky part of this operation is to remember to properly set the buffer's position before and after a read.
    try {
        // Obtain a channel
        ReadableByteChannel channel = new FileInputStream("infile").getChannel();
    
        // Create a direct ByteBuffer; see also e158 Creating a ByteBuffer
        ByteBuffer buf = ByteBuffer.allocateDirect(10);
    
        int numRead = 0;
        while (numRead >= 0) {
            // read() places read bytes at the buffer's position so the
            // position should always be properly set before calling read()
            // This method sets the position to 0
            buf.rewind();
    
            // Read bytes from the channel
            numRead = channel.read(buf);
    
            // The read() method also moves the position so in order to
            // read the new bytes, the buffer's position must be set back to 0
            buf.rewind();
    
            // Read bytes from ByteBuffer; see also
            // e159 Getting Bytes from a ByteBuffer
            for (int i=0; i<numRead; i++) {
                byte b = buf.get();
            }
        }
    } catch (Exception e) {
    }

 Related Examples
e166. Creating a Memory-Mapped File
e167. Persisting Changes to a Memory-Mapped ByteBuffer
e168. Determining If a ByteBuffer Is Direct
e170. Writing to a Channel with a ByteBuffer
e171. Writing and Appending a ByteBuffer to a File
e172. Copying One File to Another

See also: Byte Buffers    File Locking    Sockets    Streams   


© 2002 Addison-Wesley.