Java相当于VB Request.InputStream

时间:2012-11-27 15:25:31

标签: java vb.net web-services

我有一个Web服务,我正在从VB重写到Java servlet。在Web服务中,我想提取客户端上的正文实体集:

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

请告知。

2 个答案:

答案 0 :(得分:2)

您需要使用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();

答案 1 :(得分:0)

您对打印java数组感到困惑。当您打印任何java对象时,它会通过隐式调用toString()方法转换为其字符串表示形式。 Array也是一个对象,它的toString()实现对用户不太友好:它创建的字符串包含[,然后是B的符号类型定义(byte),然后是对数组的内部引用。

如果要打印数组内容,请使用Arrays.toString(yourArray)。此静态方法创建用户友好的数组字符串表示形式。这就是你需要的。

还有另一个说明。您没有正确读取阵列。请看看@ Petter的答案(+1) - 你必须实现一个循环来读取流中的所有字节。