Tôi cần chuyển đổi nội dung của InputStream thành chuỗi. Khó khăn ở đây là mã hóa đầu vào, cụ thể là Latin-1. Tôi đã thử một số phương pháp tiếp cận và đoạn mã với String, getBytes, char [], vv để có được mã hóa thẳng, nhưng không có gì dường như làm việc.Chuyển nội dung Latin-1 của InputStream thành UTF-8 Chuỗi
Cuối cùng, tôi đã đưa ra giải pháp làm việc bên dưới. Tuy nhiên, mã này có vẻ hơi dài dòng với tôi, ngay cả đối với Java. Vì vậy, câu hỏi ở đây là:
Có cách tiếp cận đơn giản và thanh lịch hơn để đạt được những gì được thực hiện ở đây không?
private String convertStreamToStringLatin1(java.io.InputStream is)
throws IOException {
String text = "";
// setup readers with Latin-1 (ISO 8859-1) encoding
BufferedReader i = new BufferedReader(new InputStreamReader(is, "8859_1"));
int numBytes;
CharBuffer buf = CharBuffer.allocate(512);
while ((numBytes = i.read(buf)) != -1) {
text += String.copyValueOf(buf.array(), 0, numBytes);
buf.clear();
}
return text;
}
Cảm ơn bạn đã bình luận quan trọng. Giải pháp đầu tiên của bạn giống như những gì tôi đang tìm kiếm. Tuy nhiên, tôi có thể thấy điểm của bạn với giải pháp thứ hai của bạn mà rất nhiều địa chỉ các trường hợp chung. Tôi đoán đây cũng là lý do tại sao kích thước bộ đệm là 2048 byte trong ví dụ của bạn? – cyroxx
Bộ đệm 2048 byte chỉ là sở thích cá nhân; bạn có thể sử dụng bất cứ điều gì cung cấp một sự cân bằng hợp lý cho thời gian chạy và mức tiêu thụ bộ nhớ. – oldrinb