从套接字使用ByteArrayInputStream接收byte []

时间:2012-05-07 02:09:10

标签: java sockets io inputstream bytearrayinputstream

这是代码,但收到错误:

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

是否可以从套接字使用byte[]接收ByteArrayInputStream

2 个答案:

答案 0 :(得分:22)

没有。如果有一个字节数组,则使用ByteArrayInputStream,并且要从数组中读取,就好像它是一个文件一样。如果您只想从套接字读取字节数组,请执行以下操作:

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

变量count将包含实际读取的字节数,数据当然将在数组data中。

答案 1 :(得分:10)

通过直接从套接字读取,您无法获得ByteArrayInputStream的实例 您需要先读取并查找字节内容 然后使用它来创建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  

现在,由于你手头有宝,我认为你还不需要bais个实例 但是,为了完成它, 你可以生成字节数组输入流,如下所示

ByteArrayInputStream bais = new ByteArrayInputStream( baos.toByteArray() );