Java从内存流中读取byte数组

本文介绍了一种改进的方法来处理Java Servlet中大文件的接收问题。通过使用ServletInputStream和ByteArrayOutputStream,避免了因文件大小限制导致的数据读取不完整问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中通过servlet接收二进制数据,然后将二进制数据流读取为byte数组。开始使用:
byte[] bs = new byte[request.getContentLength()];
request.getInputStream().read(bs);
return bs;
数据量小的时候没有问题,数据量大了就读取不完整了,后来按如下修改即可。

/**
 * 获取客户提交上来的数据
 * @param request
 * @return
 */
private byte[] getData(HttpServletRequest request) {
    try {
        // byte[] bs = new byte[request.getContentLength()];
        // request.getInputStream().read(bs);
        // return bs;

        ServletInputStream sis = request.getInputStream();
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();

        byte[] buff = new byte[100];
        int rc = 0;
        while ((rc = sis.read(buff, 0, 100)) > 0) {
            swapStream.write(buff, 0, rc);
        }
        byte[] in2b = swapStream.toByteArray();
        return in2b;
    } catch (IOException e) {
        LogHelper.logger.error("接收数据失败", e);
    }
    return new byte[0];
}

 

特记录以方便后面查看

转载于:https://www.cnblogs.com/duanjt/p/7479064.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值