【问题标题】:How to avoid encoding null (\u0000) when reading from InputStream从 InputStream 读取时如何避免编码 null (\u0000)
【发布时间】:2012-12-19 09:11:55
【问题描述】:
我正在读取请求正文并将其放入输入流中。虽然我明确地说了解码方法,但字符串后面仍然有很多 \u0000 (Null)。
InputStream is = exchange.getRequestBody();
byte[] header = new byte[100];
is.read(header);
String s = new String(header, "UTF-8");
如何使用标准 Java 库避免这种情况?我无法使用第三方库。
【问题讨论】:
标签:
java
string
inputstream
decode
【解决方案1】:
is.read(标题);返回实际读取的字节数。将代码更改为
byte[] header = new byte[100];
int n = is.read(header);
String s = new String(header, 0, n, "UTF-8");
【解决方案2】:
尝试使用BufferedReader 和InputStreamReader。即
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line = br.readLine();
【解决方案3】:
使用缓冲阅读器逐行读取:
InputStream is = exchange.getRequestBody();
BufferedReader reader = new BufferedReader(new InputStreamReader(is))
String line;
while((line = reader.readLine()) != null)
{
// do work
}
【解决方案4】:
如果您查看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;
}