Hello.
Having an issue with double streams... for a lack of a better name. :)
I have the following two streams:
- FooInputStream, fis, extending InputStream
- FooOutputStream, fos, extending OutputStream
These each have a piped stream as a local variable, so:
- fos has a PipedOutputStream, pos
- fis has a PipedInputStream, pis
So pis and pos are initalized and connected, and are passed to fis and
fos, respectively.
What i wanted to do was write to fos, which would then delegate the
call to pos, and then i could read from fis, which would read from
pis. So the writes are fine, and the read in pis returns fine, but
then it just seems to hang. If i close any of the ouputstreams, it
returns, and everything is fine. But then i can't use the
outputstreams, and i need to do that.
Can any explain what's going on? Maybe a push in the right direction
as to how to solve it?
Regards,
Carsten H. Pedersen 9 3192
"Carsten H. Pedersen" <no@nono.no> wrote in message
news:43***********************@dreader1.cybercity. dk... Hello.
Having an issue with double streams... for a lack of a better name. :)
I have the following two streams: - FooInputStream, fis, extending InputStream - FooOutputStream, fos, extending OutputStream
These each have a piped stream as a local variable, so: - fos has a PipedOutputStream, pos - fis has a PipedInputStream, pis
So pis and pos are initalized and connected, and are passed to fis and fos, respectively.
What i wanted to do was write to fos, which would then delegate the call to pos, and then i could read from fis, which would read from pis. So the writes are fine, and the read in pis returns fine, but then it just seems to hang. If i close any of the ouputstreams, it returns, and everything is fine. But then i can't use the outputstreams, and i need to do that.
Can any explain what's going on? Maybe a push in the right direction as to how to solve it?
Do you flush the streams?
Is the reading and writing done in seperate threads?
- Oliver
Oliver Wong wrote: Do you flush the streams?
Is the reading and writing done in seperate threads?
- Oliver
Well, i tried flushing. It doesn't work. Since the "outer" inputstream
gets what it needs, there shouldn't be a reason to flush the
outputstreams... or should there?
Reading and writing are in seperate threads, yeah. Each of the four
streams are in their own thread.
As i wrote, the "inner" inputstream returns to the "outer" inputstream
with the bytes written, but then it just stops, as if it is waiting
for the outputstreams to close. And if i close any of the
outputstreams, everything is fine.
/Carsten
"Carsten H. Pedersen" <no@nono.no> wrote in message
news:43***********************@dreader2.cybercity. dk... Oliver Wong wrote: Do you flush the streams?
Is the reading and writing done in seperate threads?
- Oliver Well, i tried flushing. It doesn't work.
When you say "It doesn't work", it's not clear to me what the problem
is. Exceptions being thrown? Application deadlocks? Characters arrive in
random order? etc.
Since the "outer" inputstream gets what it needs, there shouldn't be a reason to flush the outputstreams... or should there?
Closing an output stream in itself should not "unblock" the input
stream, but usually when an output stream closes, it first flushes itself.
That is why I ask if you tried flushing. Reading and writing are in seperate threads, yeah. Each of the four streams are in their own thread.
This is strange to me. I expected for there to be two threads, not four.
One thread is producing data which is pushes into the FooOutputStream, which
then forwards the data to the PipedOutputStream (all within the same
thread). Then, a second thread, reads from the FooInputStream, which then
requests data from the PipedInputStream, and then consumes the data.
- Oliver
Oliver Wong wrote: Well, i tried flushing. It doesn't work.
When you say "It doesn't work", it's not clear to me what the problem is. Exceptions being thrown? Application deadlocks? Characters arrive in random order? etc.
Well, it does not change anything in what's going on. So a deadlock of
some sort i would guess. The characters arrive in the order they
should to the inner. Reading and writing are in seperate threads, yeah. Each of the four streams are in their own thread.
This is strange to me. I expected for there to be two threads, not four. One thread is producing data which is pushes into the FooOutputStream, which then forwards the data to the PipedOutputStream (all within the same thread). Then, a second thread, reads from the FooInputStream, which then requests data from the PipedInputStream, and then consumes the data.
Yeah... i tried to replicate my problem on a smaller scale. I'm
fiddling with RMI. So two clients, each of whom has the Foo* Streams,
and inside these there is a Remote interface, which can call read()
and write(), respectively, on an object on the server. This object
being a stream, which extends PipedOutputStream (or PipedInputStream),
and the two clients communicate with eachother with the server (and
the pipes) as a proxy.
So i just made it all local, and put them all in their seperate
threads to test it... but i still get the deadlock.
Same thing happens in the RMI scenario, though:
client1 -> client1outputstream.write -> serveroutputstream.write ->
serverinputstream.read -> client2inputstream.read -> deadlock (->
client2)
I would be happy to try another solution to exchange this data between
the clients, though. It's not a must to do it this way, it's just the
way that i just sorta stumbled upon. And since this error arose, and i
don't understand, i thought i'd at least attempt to solve it before
possibly moving on to another solution.
/Carsten
"Carsten H. Pedersen" <no@nono.no> wrote in message
news:43***********************@dreader1.cybercity. dk... Oliver Wong wrote: This is strange to me. I expected for there to be two threads, not four. One thread is producing data which is pushes into the FooOutputStream, which then forwards the data to the PipedOutputStream (all within the same thread). Then, a second thread, reads from the FooInputStream, which then requests data from the PipedInputStream, and then consumes the data.
Yeah... i tried to replicate my problem on a smaller scale. I'm fiddling with RMI. So two clients, each of whom has the Foo* Streams, and inside these there is a Remote interface, which can call read() and write(), respectively, on an object on the server. This object being a stream, which extends PipedOutputStream (or PipedInputStream), and the two clients communicate with eachother with the server (and the pipes) as a proxy.
How many threads does each client have, and what does each thread do?
- Oliver
Oliver Wong wrote: Yeah... i tried to replicate my problem on a smaller scale. I'm fiddling with RMI. So two clients, each of whom has the Foo* Streams, and inside these there is a Remote interface, which can call read() and write(), respectively, on an object on the server. This object being a stream, which extends PipedOutputStream (or PipedInputStream), and the two clients communicate with eachother with the server (and the pipes) as a proxy.
How many threads does each client have, and what does each thread do?
- Oliver
Each client only has one thread. Client A writes data to its
FooOutputStream, which writes to its associated PipedOutputStream on
the server. Client B reads data from its FooInputStream, which reads
from its associated PipedInputStream (which is connected to the
PipiedOutputStream associated with client A) on the server. It then
blocks before data is returned from FooInputStream to client B.
If i close the output stream it returns - which means that it's
closing the output stream on the server, since calling close on the
FooOutputStream just sends to the call to the PipedOutputStream on the
server.
/Carsten
"Carsten H. Pedersen" <no@nono.no> wrote in message
news:43***********************@dreader1.cybercity. dk... Oliver Wong wrote: How many threads does each client have, and what does each thread do?
- Oliver
Each client only has one thread. Client A writes data to its FooOutputStream, which writes to its associated PipedOutputStream on the server. Client B reads data from its FooInputStream, which reads from its associated PipedInputStream (which is connected to the PipiedOutputStream associated with client A) on the server. It then blocks before data is returned from FooInputStream to client B.
If i close the output stream it returns - which means that it's closing the output stream on the server, since calling close on the FooOutputStream just sends to the call to the PipedOutputStream on the server.
Okay, sorry, but I'm stumped then. =)
- Oliver
> Okay, sorry, but I'm stumped then. =)
- Oliver
Thanks for trying, though. :) I think i'm missing something about how
streams behave. Since closing the outputstream seems to flush it, it's
gotta be close to working... maybe.
/Carsten
More code please.
"Carsten H. Pedersen" <no@nono.no> wrote in message
news:43***********************@dreader1.cybercity. dk...
Okay, sorry, but I'm stumped then. =)
- Oliver
Thanks for trying, though. :) I think i'm missing something about how streams behave. Since closing the outputstream seems to flush it, it's gotta be close to working... maybe.
/Carsten This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Ronald Legere |
last post by:
The new itertools stuff is pretty cool. One thing that bothers me though is
that
there seems to be no way to copy an iterator. How does one work around this?
Is
there a trick that I am missing?
...
|
by: mrstephengross |
last post by:
Hi all... How can I find out the number of significant digits (to the
right of the decimal place, that is) in a double? At least, I *think*
that's what I'm asking for. For instance:
0.103 --> 3...
|
by: ferran |
last post by:
Hi, I'm trying to convert a string to a long double using streams but
for some reasing seems to give the wrong values, the idea is to do a
precise textual conversion without roundings or...
|
by: Tron Thomas |
last post by:
What does binary mode for an ofstream object do anyway? Despite which
mode the stream uses, operator << writes numeric value as their ASCII
representation.
I read on the Internet that it is...
|
by: bonj |
last post by:
hello
I hope somebody can help me get my head around this area of 'stream'
programming... I know that streams are very fashionable nowadays so
hopefully there'll be lots of replies. ;-)
...
|
by: rainmaker1234 |
last post by:
Its very simple in VC++. In the followeing code I have declared a
String, and a double than I am taking the string and converting it into
Double. getch() at the end is only to pause the screen so...
|
by: Kobu |
last post by:
I have a question about C's abstract "streams" (that I can't seem to
FULLY understand from reading several tutorials).
Streams seems to suggest that input can be treated continously if
needed....
|
by: bonk |
last post by:
Hello
how do I connect streams in c# ?
Imagine the followung scenario: I have a StreamWriter that writes Text to a
Stream. How can I tell that Stream to pass that Data to another Stream...
|
by: Chris |
last post by:
I'm reading up on streams and I have two articles that
seem to conflict with each other. One article describes
streams and lists a few of the major ones (FileStream,
Memory Stream, Network...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
by: ryjfgjl |
last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Sonnysonu |
last post by:
This is the data of csv file
1 2 3
1 2 3
1 2 3
1 2 3
2 3
2 3
3
the lengths should be different i have to store the data by column-wise with in the specific length.
suppose the i have to...
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
| |