Re: Switching from Non-Blocking to Blocking IO
- From: Christian <fakemail@xxxxxx>
- Date: Fri, 30 Nov 2007 19:54:03 +0100
Mike Schilling schrieb:
Christian wrote:
Hello
I have just tried using non-Blocking IO in a JavaSE program.
My problem is that at one point I have to switch during the the
running protocol to blocking-io as some compressed data arrives and
my gzip implementation only allows decompressing from a blocking
stream.
so what I tried was this
@Override
public ByteChannel retrieveChannel() throws IOException {
SocketChannel sc = (SocketChannel)key.channel();
key.cancel();
sc.configureBlocking(true);
sc.socket().setSoTimeout(20000);
return sc;
}
the problem with this code is that after calling retrieveChannel()
some data arrvies on the channel and is immediately read by the
thread that uses the selector to get all non-blocking io..
Now what have I done wrong?
It smells like a synchronization problem ..
Any hints for me? Or better solutions to the problem?
If you can buffer the entire gzip file in memory, do that, and point a
ByteArrayInputStream at the result. If not, create an InputStream subclass
that returns data from the socket and blocks when none is available. The
second is more complicated, of course, since it requires multiple threads
and some synchronization between them.
I can't buffer it in memory..
as size could be anything from 100KiB to 16 GiB
I was just hoping that switching would be possible to spare me the work
of implementing this workaround.
.
- References:
- Switching from Non-Blocking to Blocking IO
- From: Christian
- Re: Switching from Non-Blocking to Blocking IO
- From: Mike Schilling
- Switching from Non-Blocking to Blocking IO
- Prev by Date: Re: Great SWT Program
- Next by Date: Re: Great SWT Program
- Previous by thread: Re: Switching from Non-Blocking to Blocking IO
- Next by thread: help for josephus folks!!!
- Index(es):
Relevant Pages
|