Java -- 如何从 inputStream(套接字/套接字服务器)读取未知数量的字节?
2022-09-02 11:14:01
希望使用 inputStream 在套接字上读取一些字节。服务器发送的字节数量可能可变,客户端事先不知道字节数组的长度。如何做到这一点?
byte b[];
sock.getInputStream().read(b);
这会导致来自网络 BzEAnSZ 的“可能未初始化错误”。帮助。
希望使用 inputStream 在套接字上读取一些字节。服务器发送的字节数量可能可变,客户端事先不知道字节数组的长度。如何做到这一点?
byte b[];
sock.getInputStream().read(b);
这会导致来自网络 BzEAnSZ 的“可能未初始化错误”。帮助。
您需要根据需要扩展缓冲区,通过以字节块为单位读取,一次读取1024,就像我前段时间写的这个示例代码一样
byte[] resultBuff = new byte[0];
byte[] buff = new byte[1024];
int k = -1;
while((k = sock.getInputStream().read(buff, 0, buff.length)) > -1) {
byte[] tbuff = new byte[resultBuff.length + k]; // temp buffer size = bytes already read + bytes last read
System.arraycopy(resultBuff, 0, tbuff, 0, resultBuff.length); // copy previous bytes
System.arraycopy(buff, 0, tbuff, resultBuff.length, k); // copy current lot
resultBuff = tbuff; // call the temp buffer as your result buff
}
System.out.println(resultBuff.length + " bytes read.");
return resultBuff;
假设发送方在数据结束时关闭流:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[4096];
while(true) {
int n = is.read(buf);
if( n < 0 ) break;
baos.write(buf,0,n);
}
byte data[] = baos.toByteArray();