request.getInputStream()未读取到数据

绿树林 2014-10-16 03:33:43
如图,请先看图,再看描述


请看代码
ServletInputStream mRead = request.getInputStream();
byte[] Buf = new byte[128];
mRead.read(Buf, 0, 128);
String str = new String(Buf, 0, 128);

在执行mRead = request.getInputStream();后,跟踪此变量,发现如上图所示,发现ib下的bb的buff内有内容,ib下的cb的buff全是0,数据应该都在bb下的buff内,但mRead.read(Buf, 0, 128);就是读取不到

请大神帮我,菜鸟我搞不定了
...全文
5088 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_14995301 2017-07-06
  • 打赏
  • 举报
回复
你这个是get请求吧 get方式参数都在url上 流是空的 用post的试试
  • 打赏
  • 举报
回复
请问您解决了吗,我也碰到相同问题
qq_35536205 2016-09-17
  • 打赏
  • 举报
回复
楼主 问题最后解决了么?
lvyzu 2016-06-04
  • 打赏
  • 举报
回复
我觉得问题应该是这样的,你前端发送请求是什么样的 用$.ajax的话,加 contentType:"multipart/form-data", 用表单调教的话,好像是enctype='multipart/form-data' 另外你看看你请求体里的contentType对不对,这里经常出问题。
luhang0102 2016-05-30
  • 打赏
  • 举报
回复
最后怎么解决的
kutuzov2016 2016-05-30
  • 打赏
  • 举报
回复
/** * 从request中获取请求参数 * * @param request * @param logFlag * @return */ public static String getPacket(HttpServletRequest request, String logFlag) { String packet = request.getParameter(Constants.PACKET); if (packet == null) { try { InputStream is = request.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); List<Byte> byteList = new ArrayList<Byte>(); byte[] temp = new byte[1]; while (bis.read(temp) != -1) { byteList.add(temp[0]); } int size = byteList.size(); if (size > 0) { byte[] b = new byte[size]; for (int i = 0; i < size; i++) { b[i] = byteList.get(i); } packet = new String(b, Constants.ENCODE); } else { LOGGER.info("[" + logFlag + "] 从request中获取请求数据流中获取为空 "); } } catch (Exception e) { LOGGER.error("[" + logFlag + "] 从request中获取请求数据流异常: " + e.toString(), e); } } LOGGER.info(orgLog(logFlag, "获取请求报文", "uri[#0]packet[#1]", request.getRequestURI(), packet)); return packet; } /** * 接收数据 * * @param request * @param logFlag * @return * @throws IOException * @throws JSONException */ public static String reciveData(HttpServletRequest request, String logFlag) { String packet = ""; // String packet = request.getParameter(Constants.PACKET); // 用了这一句后流里面取不到数据 try { InputStream in = request.getInputStream(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); // 最大读取b长度数据,如果数据流不足b长度,则当读到流截止符时,停止读取数据 byte[] b = new byte[1024 * 8]; int len; while ((len = in.read(b)) != -1) { byteArrayOutputStream.write(b, 0, len); } packet = new String(byteArrayOutputStream.toByteArray()); } catch (Exception e) { LOGGER.error("[" + logFlag + "] 从request中获取请求数据流异常: " + e.toString(), e); } LOGGER.info(orgLog(logFlag, "获取请求报文", "uri[#0]packet[#1]", request.getRequestURI(), packet)); return packet; }
亲亲小软 2015-06-30
  • 打赏
  • 举报
回复
楼主,我也遇到这种问题,你是怎么解决的呢?我找不到办法了..
绿树林 2014-10-16
  • 打赏
  • 举报
回复
大家的代码,应该是没有问题的,估计是我的环境配置有问题,未能解决,还是感谢大家
绿树林 2014-10-16
  • 打赏
  • 举报
回复
还是不行,大家的代码都没有问题, 忘记说了,我是使用spring的Controller @RequestMapping("weboffice") public void weboffice(HttpServletRequest request,HttpServletResponse response) { try { _get(request); } catch (Exception e) { } } 然后在ExecuteRun里,对request读取 private boolean _get(HttpServletRequest request) { int HeadSize = 64; try { ServletInputStream mRead = request.getInputStream(); byte[] BlockBuf = new byte[HeadSize]; mRead.read(BlockBuf, 0, HeadSize); String str = new String(BlockBuf, 0, HeadSize); System.out.pring(str); } catch (Exception e) { System.out.pring(e.getMessage); } }
  • 打赏
  • 举报
回复
试一下这段代码:
BufferedReader in = new BufferedReader(new InputStreamReader(req.getInputStream()));
		StringBuffer buffer = new StringBuffer();
		String msg = null;
		while((msg=in.readLine()) != null){
			System.out.println(msg);
			buffer.append(msg);
		}
		System.out.println("params:"+buffer);
绿树林 2014-10-16
  • 打赏
  • 举报
回复

	private boolean _get(HttpServletRequest request) {
		int HeadSize = 64;
		try {
			ServletInputStream mRead = request.getInputStream();
			byte[] BlockBuf = new byte[HeadSize];
			mRead.read(BlockBuf, 0, HeadSize);
			String str = new String(BlockBuf, 0, HeadSize);

			System.out.pring(str);
		} catch (Exception e) {
			System.out.pring(e.getMessage);
		}
	}
qzw1210 2014-10-16
  • 打赏
  • 举报
回复
代码能给全点吗,你flush()下看看。
绿树林 2014-10-16
  • 打赏
  • 举报
回复
不行啊,没有实质性的更动
shixitong 2014-10-16
  • 打赏
  • 举报
回复
 ServletInputStream mRead = request.getInputStream();
 byte[] Buf = new byte[128];
 int len=mRead.read(Buf, 0, 128);
 StringBuffer str = new StringBuffer();
 while(len != -1)

{

       
	   String str1 = new String(buf, 0, 128);
	   str.append(str1);
       len = sis.read(buf,0,128);

}
改为这样试试

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧