1 /* 2 * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package java.nio.channels; 27 28 import java.io.IOException; 29 import java.nio.ByteBuffer; 30 31 32 /** 33 * A channel that can read bytes. 34 * 35 * <p> Only one read operation upon a readable channel may be in progress at 36 * any given time. If one thread initiates a read operation upon a channel 37 * then any other thread that attempts to initiate another read operation will 38 * block until the first operation is complete. Whether or not other kinds of 39 * I/O operations may proceed concurrently with a read operation depends upon 40 * the type of the channel. </p> 41 * 42 * 43 * @author Mark Reinhold 44 * @author JSR-51 Expert Group 45 * @since 1.4 46 */ 47 48 public interface ReadableByteChannel extends Channel { 49 50 /** 51 * Reads a sequence of bytes from this channel into the given buffer. 52 * 53 * <p> An attempt is made to read up to <i>r</i> bytes from the channel, 54 * where <i>r</i> is the number of bytes remaining in the buffer, that is, 55 * <tt>dst.remaining()</tt>, at the moment this method is invoked. 56 * 57 * <p> Suppose that a byte sequence of length <i>n</i> is read, where 58 * <tt>0</tt> <tt><=</tt> <i>n</i> <tt><=</tt> <i>r</i>. 59 * This byte sequence will be transferred into the buffer so that the first 60 * byte in the sequence is at index <i>p</i> and the last byte is at index 61 * <i>p</i> <tt>+</tt> <i>n</i> <tt>-</tt> <tt>1</tt>, 62 * where <i>p</i> is the buffer's position at the moment this method is 63 * invoked. Upon return the buffer's position will be equal to 64 * <i>p</i> <tt>+</tt> <i>n</i>; its limit will not have changed. 65 * 66 * <p> A read operation might not fill the buffer, and in fact it might not 67 * read any bytes at all. Whether or not it does so depends upon the 68 * nature and state of the channel. A socket channel in non-blocking mode, 69 * for example, cannot read any more bytes than are immediately available 70 * from the socket's input buffer; similarly, a file channel cannot read 71 * any more bytes than remain in the file. It is guaranteed, however, that 72 * if a channel is in blocking mode and there is at least one byte 73 * remaining in the buffer then this method will block until at least one 74 * byte is read. 75 * 76 * <p> This method may be invoked at any time. If another thread has 77 * already initiated a read operation upon this channel, however, then an 78 * invocation of this method will block until the first operation is 79 * complete. </p> 80 * 81 * @param dst 82 * The buffer into which bytes are to be transferred 83 * 84 * @return The number of bytes read, possibly zero, or <tt>-1</tt> if the 85 * channel has reached end-of-stream 86 * 87 * @throws NonReadableChannelException 88 * If this channel was not opened for reading 89 * 90 * @throws ClosedChannelException 91 * If this channel is closed 92 * 93 * @throws AsynchronousCloseException 94 * If another thread closes this channel 95 * while the read operation is in progress 96 * 97 * @throws ClosedByInterruptException 98 * If another thread interrupts the current thread 99 * while the read operation is in progress, thereby 100 * closing the channel and setting the current thread's 101 * interrupt status 102 * 103 * @throws IOException 104 * If some other I/O error occurs 105 */ read(ByteBuffer dst)106 public int read(ByteBuffer dst) throws IOException; 107 108 } 109