我正在阅读请求正文并将其放入输入流中。虽然我明确地说了解码方法,但字符串后面仍然有很多 \u0000 (Null)。
InputStream is = exchange.getRequestBody();
byte[] header = new byte[100];
is.read(header);
String s = new String(header, "UTF-8");
如何使用标准 Java 库避免这种情况?我不能使用第三方库。
我正在阅读请求正文并将其放入输入流中。虽然我明确地说了解码方法,但字符串后面仍然有很多 \u0000 (Null)。
InputStream is = exchange.getRequestBody();
byte[] header = new byte[100];
is.read(header);
String s = new String(header, "UTF-8");
如何使用标准 Java 库避免这种情况?我不能使用第三方库。
is.read(header); 返回实际读取的字节数。将您的代码更改为
byte[] header = new byte[100];
int n = is.read(header);
String s = new String(header, 0, n, "UTF-8");
尝试BufferedReader
使用InputStreamReader
. IE
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line = br.readLine();
使用缓冲阅读器逐行读取:
InputStream is = exchange.getRequestBody();
BufferedReader reader = new BufferedReader(new InputStreamReader(is))
String line;
while((line = reader.readLine()) != null)
{
// do work
}
如果您查看 的值line.toCharArray()
,您会看到null
(aka '\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;
}