0

我有一个从 VB 重写为 Java servlet 的 Web 服务。在 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

请指教。

4

2 回答 2

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();
于 2012-11-27T15:28:40.197 回答
0

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

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

还有一个注意事项。您没有正确读取数组。请查看@Petter 的回答 (+1) - 您必须实现一个循环来从流中读取所有字节。

于 2012-11-27T15:36:51.307 回答