Ho bisogno di convertire il contenuto di un InputStream in una stringa. La difficoltà qui è la codifica dell'input, vale a dire Latin-1. Ho provato diversi approcci e frammenti di codice con String, getBytes, char [], ecc. Per ottenere la codifica corretta, ma niente sembrava funzionare.Convertire Latin-1 contenuto di InputStream in UTF-8 String
Infine, mi si avvicinò con la soluzione di lavoro di seguito. Tuttavia, questo codice mi sembra un po 'prolisso, anche per Java. Quindi la domanda è:
Esiste un approccio più semplice e più elegante per ottenere ciò che viene fatto qui?
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;
}
Grazie per il tuo commento critico. La tua prima soluzione era come quello che stavo cercando. Tuttavia, posso vedere il tuo punto con la tua seconda soluzione che si rivolge molto al caso generale. Immagino che questo sia anche il motivo per cui la dimensione del buffer è di 2048 byte nel tuo esempio? – cyroxx
Il buffer da 2048 byte era solo una preferenza personale; è possibile utilizzare qualsiasi cosa fornisca un ragionevole compromesso per il consumo di memoria e di runtime. – oldrinb