10

这是代码,但出现错误:

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

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

4

2 回答 2

26

不可以。ByteArrayInputStream当你有一个字节数组并且你想从数组中读取它时,就像它是一个文件一样。如果您只想从套接字读取字节数组,请执行以下操作:

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

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

于 2012-05-07T02:18:34.507 回答
11

您无法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() );  
于 2012-05-07T02:53:38.603 回答