I am reading data from an inputstream. To test the function
I use a String that I convert to a byte array and the to a Stream.
using the following:
return new ByteArrayInputStream(message.getBytes());
I am reading in a loop like this:
int character = 1;
try (BufferedInputStream bis = new BufferedInputStream(inputStream)) {
while (running) {
if (!suspended)
character = bis.read();
Problem is when I test this is that I want to send message that firstI don't understand. read() is a blocking method, so if there
has some data and then no data giving making read() return -1 and
then data again. Is it possible to create an inputstream that
supports this behaviour?
On 1/2/2023 5:10 AM, mike wrote:
Problem is when I test this is that I want to send message that first
has some data and then no data giving making read() return -1 and
then data again. Is it possible to create an inputstream that
supports this behaviour?
I don't understand. read() is a blocking method, so if there
is no input it blocks until there is input. It returns -1
if end of stream is reached (and stream is then invalid and
no point in calling read again).
Arne Vajhøj <arne@vajhoej.dk> wrote:
I don't understand. read() is a blocking method, so if there
is no input it blocks until there is input. It returns -1
if end of stream is reached (and stream is then invalid and
no point in calling read again).
Outside of Java world, if stdin is bound to a terminal, then
receiving an EOF and still being able to read more data till
next EOF is not quite as bizarre as it might look like to
Java'ists ;-)
Arne Vajhøj <arne@vajhoej.dk> wrote:
On 1/2/2023 5:10 AM, mike wrote:
Problem is when I test this is that I want to send message that first
has some data and then no data giving making read() return -1 and
then data again. Is it possible to create an inputstream that
supports this behaviour?
I'd think it is possible to create a custom InputStream class
that allows reading some bytes, then -1 and lateron some more
bytes, if its read() actually gets called again.
The problem is, that standard-classes like BufferedReaders, or
really any Reader, will just not expect further bytes after
first EOF. Those wrappers will just assume that an EOF on
the stream is final, and not even attempt any further read.
So, if the code (that you want to pass your special stream to)
relies on wrappers, it just won't work, but if it directly uses
that InputStream and "knows" that -1 isn't final, it might
even work - despite being fragile at best, as any software
implementing undocumented/contradocumented behaviour.
I don't understand. read() is a blocking method, so if there
is no input it blocks until there is input. It returns -1
if end of stream is reached (and stream is then invalid and
no point in calling read again).
Outside of Java world, if stdin is bound to a terminal, then
receiving an EOF and still being able to read more data till
next EOF is not quite as bizarre as it might look like to
Java'ists ;-)
Hi,
I am reading data from an inputstream. To test the function
I use a String that I convert to a byte array and the to a Stream.
using the following:
return new ByteArrayInputStream(message.getBytes());
I am reading in a loop like this:
int character = 1;
try (BufferedInputStream bis = new BufferedInputStream(inputStream)) {
while (running) {
if (!suspended)
character = bis.read();
Problem is when I test this is that I want to send message that first has some data and then no data giving making read() return -1 and then data again. Is it possible to create an inputstream that supports this behaviour?Why would you need an inputstream to do that? What are you trying to connect? Maybe look at sockets?
br,
//mike
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 360 |
Nodes: | 16 (2 / 14) |
Uptime: | 130:30:02 |
Calls: | 7,686 |
Files: | 12,828 |
Messages: | 5,711,233 |