2012-12-19 2 views
5

Ich lese einen Anfragetext und lege ihn in einen Eingabestream. Während ich explizit die Dekodiermethode sage, bekomme ich immer noch viele \ n0000 (Null) nach der Zeichenkette.So vermeiden Sie die Codierung von null ( u0000) beim Lesen von InputStream

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

Wie kann ich dies mit Standard Java Library vermeiden? Ich kann keine Bibliotheken von Drittanbietern verwenden.

Antwort

4

is.read (Header); gibt die Anzahl der Bytes zurück, die tatsächlich gelesen wurden. Ändern Sie den Code als

byte[] header = new byte[100]; 
int n = is.read(header); 
String s = new String(header, 0, n, "UTF-8"); 
1

Verwenden Sie BufferedReader mit InputStreamReader. I.e.

InputStreamReader isr = new InputStreamReader(is, "UTF-8"); 
BufferedReader br = new BufferedReader(isr); 
String line = br.readLine(); 
0

eine gepufferte Leser es Zeile für Zeile zu lesen:

InputStream is = exchange.getRequestBody(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(is)) 
String line; 
while((line = reader.readLine()) != null) 
{ 
    // do work 
} 
0

Wenn Sie auf den Wert von line.toCharArray() betrachten, sehen Sie, dass die null (aka '\u0000') Zeichen angezeigt. Eine runde Lösung, um diese loszuwerden, besteht darin, nur die Zeichen, die Sie wollen, in ein anderes Array einzufügen, indem Sie eine if-Anweisung verwenden, um die Zeichen '\u0000' auszuschließen. Also:

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