2008-10-29 4 views

답변

278

ByteArrayInputStream 또한 트릭을합니까?

그 다음 InputStreamReader,해야 할 경우 :

InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString)); 
+6

정말 보안을 위해 문자 집합을 지정해야합니다. – toolkit

+2

* 플랫폼의 기본 charset을 상속 받기를 원할 수도 있습니다. – slim

+1

감사합니다. 끝난. plataform의 기본 charset을 검색하는 가장 좋은 방법은 무엇입니까? –

31

특별히 InputStreamReader 여야합니까? StringReader을 사용하는 것이 어떨까요?

그렇지 않으면 StringBufferInputStream을 사용할 수 있지만 문자 변환 문제로 인해 사용되지 않습니다 (이로 인해 StringReader가 선호되는 이유).

InputStream is = new ByteArrayInputStream(myString.getBytes(charset)); 
16

같은 질문 @Dan로 - 왜 StringReader를하지 :

+0

좋지만 두 번째 줄은'byte [] bytes = charset.getBytes(); '입니다. – abi1964

+1

나는 그렇게 생각하지 않습니다. Abhishek. 예제에서 string은 InputStreamReader를 사용하여 액세스하려는 String의 인스턴스입니다. – toolkit

58

또는 b) InputStream 기능이 InputStreamReader? 당신은 b)를 얻지 못할 것입니다. InputStreamReaderInputStream이 아닙니다.

InputStreamReader의 목적은 InputStream - 바이트 소스를 취하여이 바이트를 Reader 형태로 문자로 디코딩하는 것입니다. 이미 데이터를 문자 (원래 문자열)로 사용하고 있습니다. 문자열을 바이트로 인코딩하고 바이트를 문자로 다시 디코딩하는 것은 중복 작업입니다.

소스에서 Reader을 얻으려는 경우 StringReader을 사용하십시오.

(바이트 만 제공)을 얻으려면 apache commons IOUtils.toInputStream(..)을 다른 답변에서 제안한대로 사용하십시오.

+31

문자 인코딩을 언급하지 않고 String-> byte [] 또는 그 반대로 변환하는 것은 거의 항상 버그입니다. –

+1

기본 플랫폼 인코딩 및 문자열의 문자에 따라 데이터 손실이 발생할 수 있습니다. 인코딩 및 디코딩 작업 모두에 유니 코드 인코딩을 지정하는 것이 좋습니다. 자세한 내용은 다음을 참조하십시오. http://illegalargumentumentception.blogspot.com/2009/05/java-rough-guide-to-character-encoding.html#javaencoding_lossyconversions – McDowell

+0

인코딩 매개 변수가 특정 바이트를 가져 오는 데 필요한 것은 아닙니다. 부호화? 나는 당신이 InputSTreamReader 생성자를 선택할 때 String # getBytes 호출에 대해 동일한 인코딩을 선택하는 한, 당신이 선택한 것을 중요하게 생각하지 않는다고 생각한다. 나는 Joachim과 McDowell이이 특별한 경우에 대해 틀렸다고 확신한다. String의 주위에 InputStreamReader를 랩하기위한 인코딩 지식은 필요 없습니다. –

2

당신은 InputStreamReader 밖으로) Reader 기능을 얻으려고 노력하고 있습니까 : 나는 또한 아파치 평민 그렇게 IOUtils 클래스를 발견

String charset = ...; // your charset 
byte[] bytes = string.getBytes(charset); 
ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 
InputStreamReader isr = new InputStreamReader(bais); 
2

당신은 Cactoos을 시도 할 수 있습니다 :

InputStream stream = new InputStreamOf(str); 

를 그리고, 당신이 Reader 필요한 경우 :

Reader reader = new ReaderOf(stream); 
관련 문제