6

我正在阅读请求正文并将其放入输入流中。虽然我明确地说了解码方法,但字符串后面仍然有很多 \u0000 (Null)。

InputStream is = exchange.getRequestBody();
byte[] header = new byte[100];
is.read(header);
String s = new String(header, "UTF-8");

如何使用标准 Java 库避免这种情况?我不能使用第三方库。

4

4 回答 4

4

is.read(header); 返回实际读取的字节数。将您的代码更改为

byte[] header = new byte[100];
int n = is.read(header);
String s = new String(header, 0, n, "UTF-8");
于 2012-12-19T09:22:04.380 回答
1

尝试BufferedReader使用InputStreamReader. IE

InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line = br.readLine();
于 2012-12-19T09:17:28.893 回答
0

使用缓冲阅读器逐行读取:

InputStream is = exchange.getRequestBody();
BufferedReader reader = new BufferedReader(new InputStreamReader(is))
String line;
while((line = reader.readLine()) != null)
{
    // do work
}
于 2012-12-19T09:18:02.290 回答
0

如果您查看 的值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;
}
于 2015-02-22T21:28:38.833 回答