从InputStream读取时如何避免编码null(\ u0000)

时间:2012-12-19 09:11:55

标签: java string inputstream decode

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

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

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

4 个答案:

答案 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)

尝试将BufferedReaderInputStreamReader一起使用。即。

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;
}