我正在阅读请求正文并将其放入输入流中。虽然我明确地说了解码方法,但我仍然在字符串之后得到很多\ u0000(Null)。
InputStream is = exchange.getRequestBody();
byte[] header = new byte[100];
is.read(header);
String s = new String(header, "UTF-8");
如何使用标准Java库避免这种情况?我不能使用第三方库。
答案 0 :(得分:4)
is.read(报头);返回实际读取的字节数。将您的代码更改为
byte[] header = new byte[100];
int n = is.read(header);
String s = new String(header, 0, n, "UTF-8");
答案 1 :(得分:1)
尝试将BufferedReader
与InputStreamReader
一起使用。即。
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line = br.readLine();
答案 2 :(得分:0)
使用缓冲读卡器逐行阅读:
InputStream is = exchange.getRequestBody();
BufferedReader reader = new BufferedReader(new InputStreamReader(is))
String line;
while((line = reader.readLine()) != null)
{
// do work
}
答案 3 :(得分:0)
如果您查看line.toCharArray()
的值,您会看到null
(又名'\u0000'
)字符出现。摆脱这些的四舍五入解决方案是通过使用if语句来排除'\u0000'
字符,只添加你想要的字符到另一个数组。所以:
public String removeNullChars(String line) {
String result = "";
// Convert to char array.
char[] chars = line.toCharArray();
// Add only chars that are not equal to '\u0000' to result
for (int i = 0; i < chars.length; i++) {
if (chars[i] != '\u0000') {
result += chars[i];
}
}
return result;
}