Java从内存流中读取byte数组
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]; }
特记录以方便后面查看