10

Here is the code but got error:

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

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

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
hkguile
  • 4,235
  • 17
  • 68
  • 139
  • 1
    *"but got error:"* Got what error? Always copy/paste exception & error output into the question (using code tags). – Andrew Thompson May 07 '12 at 02:22
  • Your question doesn't make sense. A ByteArrayInputStream reads bytes from a byte array. If you want to read from a socket you can't read from an array of bytes. What problem are you trying to solve here? – user207421 May 07 '12 at 02:38

2 Answers2

26

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.

Ernest Friedman-Hill
  • 80,601
  • 10
  • 150
  • 186
11

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() );  
Ravinder Reddy
  • 23,692
  • 6
  • 52
  • 82