有客户端和服务器组件,客户端通过使用POST方法将blob中的数据转换为服务器,以更安全的方式发送数据。
可以建议我如何将该blob数据转换为服务器端(Java)中的字符串对象。我已尝试过以下代码
Way 1):
==============================
String streamLength = request.getHeader("Content-Length");
int streamIntLength = Integer.parseInt(streamLength);
byte[] bytes = new byte[streamIntLength];
request.getInputStream().read(bytes, 0, bytes.length);
String content = DatatypeConverter.printBase64Binary(bytes);
System.out.println(content);
Output for above code is : some junk data is displaying.
dABlAG0AcABsAGEAdABlAD0AMgAzADUAUgBfAFAAcgBvAHYAaQBkAGUAcgBfA
Way 2) :
======
BufferedReader reader = new BufferedReader(new InputStreamReader(
request.getInputStream()));
StringBuilder sb = new StringBuilder();
for (String line; (line = reader.readLine()) != null;) {
String str = new String(line.getBytes());
System.out.println(str);
}
Please suggest me any one, above both ways are not worked out.
答案 0 :(得分:1)
下面的代码适用于我。
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = null;
try {
String streamLength = request.getHeader("Content-Length");
int streamIntLength = Integer.parseInt(streamLength);
InputStream inputStream = request.getInputStream();
if (inputStream != null) {
bufferedReader = new BufferedReader(new InputStreamReader(
inputStream));
char[] charBuffer = new char[streamIntLength];
int bytesRead = -1;
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
stringBuilder.append(charBuffer, 0, bytesRead);
}
} else {
stringBuilder.append("");
}
} catch (IOException ex) {
throw ex;
}
String body = stringBuilder.toString();
//System.out.println(body);
byte[] bytes = body.getBytes();
System.out.println(StringUtils.newStringUtf16Le(bytes));
答案 1 :(得分:0)
从第一种方法看,数据似乎是编码的(可能采用Base64格式)。解码后,您面临的问题是什么?如果数据是String然后编码为Base64,则应在解码后获取实际字符串。 (假设客户端和服务器端的平台区域设置相同)。
如果是二进制数据,最好只将其保留在字节流中。如果你无论如何想要它转换为字符串,那么第一种方法看起来没问题。 如果此二进制数据表示某种文件,您可以使用HTTP标头获取相关信息并将其写入临时位置以供进一步使用。