Receive byte[] using ByteArrayInputStream from a socket

43,772

Solution 1

No. You use ByteArrayInputStream when you have an array of bytes, and you want to read from the array as if it were a file. If you just want to read arrays of bytes from the socket, do this:

InputStream stream = socket.getInputStream();
byte[] data = new byte[100];
int count = stream.read(data);

The variable count will contain the number of bytes actually read, and the data will of course be in the array data.

Solution 2

You can't get an instance of ByteArrayInputStream by reading directly from socket.
You require to read first and find byte content.
Then use it to create an instance of ByteArrayInputStream.

InputStream inputStream = socket.getInputStream();  

// read from the stream  
ByteArrayOutputStream baos = new ByteArrayOutputStream();  
byte[] content = new byte[ 2048 ];  
int bytesRead = -1;  
while( ( bytesRead = inputStream.read( content ) ) != -1 ) {  
    baos.write( content, 0, bytesRead );  
} // while  

Now, as you have baos in hand, I don't think you still need a bais instance.
But, to make it complete,
you can generate byte array input stream as below

ByteArrayInputStream bais = new ByteArrayInputStream( baos.toByteArray() );  
Share:
43,772
hkguile
Author by

hkguile

Updated on April 15, 2020

Comments

  • hkguile
    hkguile about 4 years

    Here is the code but got error:

    bin = new ByteArrayInputStream(socket.getInputStream());
    

    Is it possible to receive byte[] using ByteArrayInputStream from a socket?

  • so-random-dude
    so-random-dude almost 4 years
    Whats the significance of the number 100 in "new byte[100]" Will I over allocate or underallocate with the 100
  • Ernest Friedman-Hill
    Ernest Friedman-Hill almost 4 years
    It’s the size of the array, hence the maximum number of bytes that’ll be read at once. You can use any size you like, and you can read in a loop until you hit the end of the file (count will become -1 at that point.)
  • so-random-dude
    so-random-dude almost 4 years
    Thanks @Ernest. That Makes sense