Java 使用ByteArrayInputStream从套接字接收字节[]
以下是代码,但出现错误:Java 使用ByteArrayInputStream从套接字接收字节[],java,sockets,io,inputstream,bytearrayinputstream,Java,Sockets,Io,Inputstream,Bytearrayinputstream,以下是代码,但出现错误: bin = new ByteArrayInputStream(socket.getInputStream()); 是否可以使用ByteArrayInputStream从套接字接收byte[]?否。当您有一个字节数组时,您可以使用ByteArrayInputStream,并且希望像读取文件一样从数组中读取。如果只想从套接字读取字节数组,请执行以下操作: InputStream stream = socket.getInputStream(); byte[] data =
bin = new ByteArrayInputStream(socket.getInputStream());
是否可以使用
ByteArrayInputStream
从套接字接收byte[]
?否。当您有一个字节数组时,您可以使用ByteArrayInputStream
,并且希望像读取文件一样从数组中读取。如果只想从套接字读取字节数组,请执行以下操作:
InputStream stream = socket.getInputStream();
byte[] data = new byte[100];
int count = stream.read(data);
变量
count
将包含实际读取的字节数,数据当然将在数组data
中。您无法通过直接从套接字读取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
现在,由于您手头有BAO,我认为您不需要一个BAI
实例。但是,为了使它完整,
您可以生成字节数组输入流,如下所示
ByteArrayInputStream bais = new ByteArrayInputStream( baos.toByteArray() );
但有错误:“有什么错误?始终将异常和错误输出复制/粘贴到问题中(使用代码标记)。您的问题没有意义。ByteArrayInputStream从字节数组读取字节。如果要从套接字读取,则无法从字节数组中读取。您试图解决的问题是什么?在“new byte[100]”中,数字100的意义是什么?我会对100进行过度分配还是分配不足?这是数组的大小,因此一次读取的最大字节数。您可以使用任意大小,并且可以在循环中读取,直到到达文件末尾(此时计数将变为-1)。谢谢@Ernest。这是有道理的