Question about AsynchronousByteChannel.read()
Alan Bateman
Alan.Bateman at oracle.com
Wed Jul 13 01:31:25 PDT 2011
cowwoc wrote:
> Hi,
>
> According to the Javadoc of read(ByteBuffer, A,
> CompletionHandler<Integer,? super A>):
>
> "This method may be invoked at any time. Some channel types may not allow
> more than one read to be outstanding at any given time. If a thread
> initiates a read operation before a previous read operation has completed
> then a ReadPendingException will be thrown."
>
> On the one hand you're indicating that that some channels support *do*
> multiple read requests. On the other hand you're saying if multiple requests
> are issued, ReadPendingException will be thrown.
>
> Did you mean to imply that ReadPendingException will only be thrown if the
> channel implementation does *not* support multiple reads but in other
> channel implementations it might work just fine?
>
Yes, it depends on the channel type. With a channel to a stream oriented
connection then it doesn't always make sense to have more than one
outstanding I/O operations of a given type as they would complete in an
undefined order (and with an operation such as write then it would
easily "corrupt" the stream for example). However it does make sense for
other channel types, for example AsynchronousFileChannel where there may
be I/O operations to different parts of the file happening at the same
thing. If you go back through the archives of this list then you should
find some prior discussion on queuing of I/O operations that make be
useful to you.
-Alan.
More information about the nio-dev
mailing list