2012-12-19 33 views
5

Tôi đang đọc phần thân yêu cầu và đặt nó vào luồng đầu vào. Trong khi tôi đang nói một cách rõ ràng phương thức giải mã, tôi vẫn nhận được nhiều \ u0000 (Null) sau chuỗi.Cách tránh mã hóa null ( u0000) khi đọc từ InputStream

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

Làm cách nào để tránh điều này với Thư viện Java chuẩn? Tôi không thể sử dụng thư viện của bên thứ ba.

Trả lời

4

is.read (tiêu đề); trả về số byte thực sự đã đọc. Thay đổi mã của bạn như

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

Hãy thử sử dụng BufferedReader với InputStreamReader. I E.

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

Sử dụng một đầu đọc đệm để đọc từng dòng một:

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

Nếu bạn nhìn vào giá trị của line.toCharArray(), bạn sẽ thấy rằng các null (aka '\u0000') chars xuất hiện. Một giải pháp vòng quanh để loại bỏ chúng là chỉ thêm các ký tự mà bạn muốn vào mảng khác bằng cách sử dụng câu lệnh if để loại trừ các ký tự '\u0000'. Vì vậy:

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; 
} 
Các vấn đề liên quan