2013-05-08 43 views
5

Tôi không thể hiểu tài liệu nói gì về điều đó.Android HttpURLConnection: nén gzip

Theo mặc định, việc triển khai yêu cầu HttpURLConnection này sử dụng máy chủ nén gzip. Vì getContentLength() trả về số byte được truyền, bạn không thể sử dụng phương thức đó để dự đoán có bao nhiêu byte có thể được đọc từ getInputStream(). Thay vào đó, đọc luồng đó cho đến khi nó cạn kiệt: khi read() trả về -1. nén gzip có thể bị vô hiệu hóa bằng cách thiết lập mã hóa có thể chấp nhận trong tiêu đề yêu cầu:

urlConnection.setRequestProperty("Accept-Encoding", "identity"); 

Tôi muốn biết nếu việc triển khai hiện thực giải nén các dòng trước khi trở về nó (sử dụng conn.getInputStream()) hoặc nếu nó chỉ đơn giản nói rằng kết nối tự động gửi tiêu đề cho mã hóa gzip và tôi cần phải quản lý với điều đó.

Cảm ơn.

Trả lời

11

Bạn không cần xử lý việc này. chỉ cần sử dụng conn.getInputStream()

Từ this blogpost:

Trong Gingerbread, chúng tôi đã thêm nén phản ứng trong suốt. HttpURLConnection sẽ tự động thêm tiêu đề này để yêu cầu gửi đi, và xử lý các phản ứng tương ứng:

Accept-Encoding: gzip

+1

Nguồn: [Nhà phát triển Android Blog - Android của khách hàng HTTP] (http: // android-phát triển. blogspot.com/2011/09/androids-http-clients.html) – Czechnology