VB Request.InputStream的Java等价物
我有一个web服务,我正在从VB重新编写到Java servlet。在web服务中,我希望提取客户端上的body实体集,如下所示:VB Request.InputStream的Java等价物,java,vb.net,web-services,Java,Vb.net,Web Services,我有一个web服务,我正在从VB重新编写到Java servlet。在web服务中,我希望提取客户端上的body实体集,如下所示: StringEntity stringEntity = new StringEntity(xml, HTTP.UTF_8); stringEntity.setContentType("application/xml"); httppost.setEntity(stringEntity); 在VB web服务中,我使用以下方法获取此数据: Dim objReader
StringEntity stringEntity = new StringEntity(xml, HTTP.UTF_8);
stringEntity.setContentType("application/xml");
httppost.setEntity(stringEntity);
在VB web服务中,我使用以下方法获取此数据:
Dim objReader As System.IO.StreamReader
objReader = New System.IO.StreamReader(Request.InputStream)
Dim strXML As String = objReader.ReadToEnd
这很有效。但我正在寻找Java中的等价物
我试过这个:
ServletInputStream dataStream = req.getInputStream();
byte[] data = new byte[dataStream.toString().length()];
dataStream.read(data);
但它带给我的只是一根无法理解的线:
data = [B@68514fec
请告知。您需要使用ByteArrayOutputStream,如下所示:
ServletInputStream dataStream = req.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int r;
byte[] buffer = new byte[1024*1024];
while ((r = dataStream.read(data, 0, buffer.length)) != -1) {
baos.write(buffer, 0, r);
}
baos.flush();
byte[] data = baos.toByteArray();
您对打印java数组感到困惑。打印任何java对象时,都会通过隐式调用
toString()
方法将其转换为字符串表示形式。数组也是一个对象,它的toString()
实现对用户不太友好:它创建包含[
的字符串,然后为字节创建符号类型定义(B
),然后创建数组的内部引用
如果要打印数组内容,请使用Arrays.toString(yourArray)
。此静态方法创建用户友好的数组字符串表示形式。这就是您在此处需要的
还有一个注意事项。您没有正确读取数组。请查看@Petter的答案(+1)-您必须实现一个循环来读取流中的所有字节。使用此方法仍然会得到类似的结果:数据=[B@3ffa7dd2String s=新字符串(数据,“UTF-8”);
如果字符编码是普通XML中的UTF-8,.toString()
将给出一个对象表示,通常是一个对象地址,如@3ffa7dd2,“[B”对于字节数组。感谢@Joop Eggen,这是拼图中缺少的部分。我逐字复制了@Petters代码,然后将第二个数据字节数组重命名为data2以消除冲突,但仍然得到与我在评论中提到的相同的结果。换句话说,我循环了。