Java에서 문자열을 InputStream으로 변환하는 방법


답변:


1410

이처럼 :

InputStream stream = new ByteArrayInputStream(exampleString.getBytes(StandardCharsets.UTF_8));

이것은 UTF-8 로 인코딩 된 원래 문자열을 나타내는 바이트 스트림 인 InputStream을 원한다고 가정합니다 .

적은 7 이상의 자바 버전의 교체 StandardCharsets.UTF_8와 함께 "UTF-8".


1
수행 할 때이 문자 집합이 손실되지 않습니다. String-> bytes-> ByteArrayInputStream? 예를 들어 "ü"에서 이것을 시도하면 바이트는 올바른 문자를 가지지 만 ByteArrayInputStream은 올바른 변환을 잃게됩니다. 아니면 내가 틀렸어?
Jonathan Ramos

20
StandardCharsets에는 최소 API 레벨 19가 필요합니다.
Nantoka

3
@JonathanRamos 전환을 보류하는 것은 스트림에 달려 있지 않습니다. 바이트를 문자열로 다시 디코딩하는 것은 무엇이든 가능합니다.
Cruncher

26
@Nantoka StandardCharsets.UTF_8 대신 모든 API 레벨에 Charset.forName ( "UTF-8")을 사용할 수 있습니다.
PJ_Finnegan

그것의 작업은 단지 String을 추가합니다. newStr = URLDecoder.decode (URLEncoder.encode (response, "iso8859-1"), "UTF-8"); for (utf8)
sirmagid

275

내가 사용하는 것을 발견 아파치 코 몬즈 IO하면 훨씬 쉽게 내 인생을 만든다.

String source = "This is the source of my input stream";
InputStream in = org.apache.commons.io.IOUtils.toInputStream(source, "UTF-8");

라이브러리에는 프로젝트에서 사용할 수있는 일반적으로 수행되는 작업에 대한 다른 바로 가기도 많이 제공됩니다.


5
그들은 새로운 ByteArrayInputStream (exampleString.getBytes ( "UTF-8"))을 사용했습니다. 따라서 InputStream stream = new ByteArrayInputStream (exampleString.getBytes ( "UTF-8"))을 사용하는 최적화 된 방법입니다.
Pankaj Kumar

9
@PankajKumar : Java의 JIT 컴파일러는이를 인라인 할 수 있습니다.
Andrew White

8
인코딩을 지정하지 않는 방법을 사용하여 ... 끔찍한 생각이다
b1nary.atr0phy

2
@ b1naryatr0phy : Apache commons에는 인코딩을 두 번째 매개 변수로 사용하는이 메소드의 다른 형식이 포함되어 있습니다 (맞습니다. 바람직합니다).
Cuga

8
StandardCharsets.UTF_8일반 텍스트 대신 정의를 사용할 수 있습니다 .
douglaslps

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.