• Is it possible to send message bursts?

    From mike@21:1/5 to All on Mon Jan 2 02:10:37 2023
    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?

    br,

    //mike

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?Arne_Vajh=c3=b8j?=@21:1/5 to mike on Mon Jan 2 10:42:35 2023
    On 1/2/2023 5:10 AM, mike wrote:
    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?
    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).

    You can easily write am InputStream class that pause a bit before
    returning from read(), but does that really make sense?

    Arne

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Andreas Leitgeb@21:1/5 to arne@vajhoej.dk on Mon Jan 2 19:05:49 2023
    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 ;-)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Andreas Leitgeb@21:1/5 to Andreas Leitgeb on Mon Jan 2 19:13:40 2023
    Andreas Leitgeb <avl@logic.at> wrote:
    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 ;-)

    Another use could be file-based Streams:
    You read a file to its end.
    Some other process appends data to the file.
    You could now (theoretically) read some more data.

    I must admit, I'm not sure(*), if that would work in
    Java, with its rather simple stream-abstraction,
    but it surely does seem reasonable in principle.

    *: and I'm too lazy to check ;-)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?Arne_Vajh=c3=b8j?=@21:1/5 to Andreas Leitgeb on Mon Jan 2 19:27:43 2023
    On 1/2/2023 2:05 PM, Andreas Leitgeb wrote:
    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.

    True.

    But if it was me then I would go in another direction.

    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 ;-)

    True.

    But then that is not really EOF just CTRL/D or CTRL/Z.
    being treated like EOF.

    Arne

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From e.d.programmer@gmail.com@21:1/5 to mike on Tue Jan 3 04:07:10 2023
    On Monday, January 2, 2023 at 5:10:45 AM UTC-5, mike wrote:
    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?

    br,

    //mike
    Why would you need an inputstream to do that? What are you trying to connect? Maybe look at sockets?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)