2012-12-19 10 views
5

Czytam treść żądania i umieszczam go w strumieniu wejściowym. Chociaż wyraźnie mówię o metodzie dekodowania, nadal otrzymuję wiele \ n0000 (Null) po ciągu.Jak uniknąć kodowania null ( u0000) podczas odczytu z InputStream

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

Jak mogę tego uniknąć w standardowej bibliotece Java? Nie mogę korzystać z bibliotek stron trzecich.

Odpowiedz

4

is.read (nagłówek); zwraca liczbę bajtów, które faktycznie przeczytano. Zmień swój kod jako

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

Spróbuj użyć BufferedReader z InputStreamReader. To znaczy.

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

pomocą buforowany czytelnika odczytać wiersz po wierszu:

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

Jeśli spojrzeć na wartości line.toCharArray(), widać, że null (aka '\u0000') znaki widoczne. Okrągłym rozwiązaniem pozwalającym pozbyć się tych znaków jest dodanie tylko znaków, które chcesz do innej tablicy, za pomocą instrukcji if, aby wykluczyć znaki typu '\u0000'. A więc:

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