답변:
ByteArrayInputStream 도 트릭을 수행합니다.
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
그런 다음 리더로 변환하십시오.
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream
: 이후 : JDK1.0이 클래스가 "Java 1.4 이후"라고 가정하는 사소한 이유는 없습니다. 잘못된 버전 번호는 Java 1.4가 도입 된 것처럼 특히 이상 NIO
하며 동일한 버전 내에서 API와 개념적인 후속 작업을 도입하는 것은 의미가 없습니다.
나는 또한 아파치 커먼즈 IOUtils
클래스를 발견했다 .
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
무손실 것입니다.
String
로의 쓸모없는 변환에 대해 말하지 말라 ...byte[]
char
특별히 InputStreamReader 여야합니까? 어떻게 사용에 대한 StringReader를을 ?
그렇지 않으면 StringBufferInputStream을 사용할 수 있습니다. 있지만 문자 변환 문제로 인해 더 이상 사용되지 않으므로 StringReader를 선호해야합니다.
@Dan 과 같은 질문 -왜 StringReader가 아닌가?
InputStreamReader 여야하는 경우 :
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
byte[] bytes = charset.getBytes();
당신은) 도착하려고 Reader
밖으로 기능을 InputStreamReader
, 또는 b) InputStream
중 기능 InputStreamReader
? 당신은 얻을 수 없습니다 b). InputStreamReader
이 아닙니다 InputStream
.
목적은 바이트의 소스 InputStreamReader
를 취하여 InputStream
바이트를 a 형식으로 문자로 디코딩하는 것 Reader
입니다. 이미 데이터를 문자 (원래 문자열)로 가지고 있습니다. 문자열을 바이트로 인코딩하고 바이트를 문자로 다시 디코딩하는 것은 중복 작업입니다.
Reader
소스를 사용하지 않으려면을 사용하십시오 StringReader
.
InputStream
(바이트 만 제공) 을 얻으려는 경우 IOUtils.toInputStream(..)
여기에 다른 답변에서 제안한 아파치 공통 을 사용 하십시오.