返回信息流在J2EE中使用的,有的时候不知道具体到来数据流的大小,就用一个比较大的byte[100000]来接收,这样肯定内存消耗很大了,但是又无法从request.getContentLength()中来获取流的大小,这时候有没有什么能动态扩展的字节数组来接收呢?
这是一条镜像帖。来源:北邮人论坛 / java / #13631同步于 2010/3/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
请问java有没有动态的byte数组?
javame
2010/3/23镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
自己写的,满足lz要求。参数为一个输入流,返回为一个byte数组,该数组没有浪费一点资源,长度等于流的大小。
public static byte[] GetAll(InputStream in) throws IOException {
byte[] buf = new byte[100];
byte[] dest = new byte[0];
int len = -1;
while ((len = in.read(buf)) != -1) {
byte[] tmp = new byte[dest.length + len];
System.arraycopy(dest, 0, tmp, 0, dest.length);
System.arraycopy(buf, 0, tmp, dest.length, len);
dest = tmp;
}
return dest;
}
ByteArrayOutputStream为什么不行,只用一个比较小的buffer来接收数据,接到多少就写入os,然后当读到结尾后,从os里得到byte数组不就完了吗?