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

10

这是代码,但出现了错误:

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

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


1
“but got error:”是什么错误?请务必将异常和错误输出复制/粘贴到问题中(使用代码标记)。 - Andrew Thompson
你的问题没有意义。ByteArrayInputStream从字节数组中读取字节。如果你想从socket中读取,就不能从字节数组中读取。你在这里试图解决什么问题? - user207421
2个回答

26
不需要。当您有一个字节数组,并且希望从该数组中读取并像读文件一样使用时,可以使用ByteArrayInputStream。如果您只想从套接字读取字节数组,请执行以下操作:
InputStream stream = socket.getInputStream();
byte[] data = new byte[100];
int count = stream.read(data);

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


"new byte[100]" 中的数字100有什么重要意义? 我会因为100而分配过多或不足吗? - so-random-dude
2
这是数组的大小,因此一次读取的最大字节数。您可以使用任何大小,并且可以在循环中读取,直到达到文件结尾(此时计数将变为-1)。 - Ernest Friedman-Hill
谢谢@Ernest。那很有道理。 - so-random-dude

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  

现在,由于你已经有了baos,我认为你不再需要一个bais实例。
但是,为了使其完整,
你可以按以下方式生成字节数组输入流

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接