Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB Request.InputStream的Java等价物_Java_Vb.net_Web Services - Fatal编程技术网

VB Request.InputStream的Java等价物

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

我有一个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 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@3ffa7dd2
String s=新字符串(数据,“UTF-8”);
如果字符编码是普通XML中的UTF-8,
.toString()
将给出一个对象表示,通常是一个对象地址,如@3ffa7dd2,“[B”对于字节数组。感谢@Joop Eggen,这是拼图中缺少的部分。我逐字复制了@Petters代码,然后将第二个数据字节数组重命名为data2以消除冲突,但仍然得到与我在评论中提到的相同的结果。换句话说,我循环了。