InputStreamの内容をStringに変換する必要があります。ここでの難しさは、入力エンコーディング、つまりLatin-1です。エンコーディングをまっすぐにするために、String、getBytes、char []などでいくつかのアプローチとコードスニペットを試しましたが、何も動作していないようです。InputStreamのLatin-1の内容をUTF-8文字列に変換する
最後に、以下の解決策を考え出しました。しかし、このコードは、たとえJavaの場合でも、少し冗長であるようです。したがって、ここでの質問は次のとおりです。
ここで行われていることを達成するためのよりシンプルで洗練されたアプローチがありますか?
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;
}
あなたの批判的なコメントをありがとう。あなたの最初の解決策は、私が探していたもののようでした。しかし、私は、一般的なケースに非常に対処している2番目のソリューションであなたのポイントを見ることができます。私はこれもあなたの例では2048バイトのバッファーサイズだと思いますか? – cyroxx
2048バイトのバッファは個人的な好みでした。ランタイムとメモリ消費のために妥当なトレードオフを提供するものを使用することができます。 – oldrinb