java.io.InputStream으로 시작하는 경우 전체 스트림을 String으로 읽는 가장 쉬운 방법은 무엇입니까 (utf-8이라고 가정)?InputStream의 텍스트 읽기
이것은 꽤 쉬워야하지만 나는 거의 C# 인물이고 google은 나를 실패하고있다. 감사.
java.io.InputStream으로 시작하는 경우 전체 스트림을 String으로 읽는 가장 쉬운 방법은 무엇입니까 (utf-8이라고 가정)?InputStream의 텍스트 읽기
이것은 꽤 쉬워야하지만 나는 거의 C# 인물이고 google은 나를 실패하고있다. 감사.
당신이 편안 라이센스 무엇에 따라, 자카르타 커먼즈 IO 라이브러리와 one liner입니다.
+1 - 널리 사용되는 라이브러리를 재사용하면 시간과 노력을 절약 할 수 있습니다. –
org.apache.commons.io.IOUtils.toString (InputStream input, String encoding)을 사용하여 종료했습니다. – jthg
자카르타 커먼즈에서 사람들이 제안 할 때 항상 투표합니다. 지루하고, 하루가 끝날 때까지 제공해야 할 비즈니스 로직이 아직 남아 있으며, 일상을 바꾸는 것이 타당하지 않습니다. –
스트림에서 읽기/쓰기는 Java에서 매우 고통 스럽습니다.
public static String getStreamContents(InputStream stream) throws IOException {
StringBuilder content = new StringBuilder()
Reader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"))
String lineSeparator = System.getProperty("line.separator");
try {
String line
while ((line = reader.readLine()) != null) {
content.append(line + lineSeparator)
}
return content.toString()
} finally {
reader.close()
}
}
새로운 InputStreamReader (스트림, "UTF-8")로 새로운 InputStreamReader (stream) 교환 – Buhb
코드가 줄 바꿈을 버립니다. –
완료, 팁 덕분에 –
은 문자 인코딩을 지정합니다. 코드를 낭독하지 말고 버그를 도입하고 BufferedReader
으로 실행 속도를 줄입니다.
다음은 예입니다. 버퍼 크기, 인코딩 등으로 매개 변수화 할 수 있습니다.
static String readString(InputStream is) throws IOException {
char[] buf = new char[2048];
Reader r = new InputStreamReader(is, "UTF-8");
StringBuilder s = new StringBuilder();
while (true) {
int n = r.read(buf);
if (n < 0)
break;
s.append(buf, 0, n);
}
return s.toString();
}
+1 - 그러나 일반적인 관용구는 다음과 같이 루프를 작성하는 것입니다.'int n; while ((n = r.read (buf))> = 0) {s.append (buf, 0, n); }' –
불행히도 일반적인 관용구입니다. 하지만 부작용이있는 테스트는 피하는 편이 낫습니다. – erickson
Commons-IO를 사용하는 것이 가장 좋은 방법입니다. 또 다른 방법은 모든 바이트를 복사 한 다음 문자열로 변환하는 것입니다.
public static String readText(InputStream is, String charset) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] bytes = new byte[4096];
for(int len;(len = is.read(bytes))>0;)
baos.write(bytes, 0, len);
return new String(baos.toByteArray(), charset);
}
나는 스트림 자바 8 좋은 방법을 발견했습니다
새로운 InputStreamReader 새로운 InputStreamReader를 (입니다) 교환 할 수 위에 언급 한 바와 같이public static String readString(InputStream is) {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String content = br.lines().reduce("", String::concat);
return content;
}
(이다 "UTF-8") ,하지만이 생성자에 대한 경험이 없습니다.
귀하의 제안은 결과에서 \ n 줄 종결자가 없어집니다. – Gabriel
@Gabriel 좋은 지적. 무엇에 대해서 :'br.lines(). reduce ("\ n", String :: concat)' –
http://stackoverflow.com/questions/309424/in-java-how-do-a-read-an-input-stream-in-to-a-string – akuhn
doh, 검색하지 않았습니다. "입력 스트림 "(중간에 공백이 있음). – jthg