【问题标题】: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】:

      尝试使用BufferedReaderInputStreamReader。即

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-13
            • 1970-01-01
            • 2016-11-22
            • 2011-10-20
            • 2014-07-21
            • 1970-01-01
            相关资源
            最近更新 更多