我有一个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
请告知。
答案 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) - 你必须实现一个循环来读取流中的所有字节。