Yanıtlar:
ByteArrayInputStream hile de yapar:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Ardından okuyucuya dönüştürün:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream : Since: JDK1.0 Bu sınıfın “Java 1.4'ten beri” olduğunu varsaymanın en ufak bir nedeni yoktur. Bu yanlış sürüm numarası özellikle Java 1.4'ün tanıtımı kadar tuhaftır NIOve aynı sürümde bir API ve onun kavramsal halefini tanıtmak çok mantıklı değildir.
Ayrıca apache commons IOUtilssınıfı buldum , yani:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")kayıpsız olurdu.
Stringbir byte[]diziye gereksiz bir dönüşümünden bahsetmemek için, baytları chars'ye geri dönüştürmek için ...
Özellikle bir InputStreamReader olmalı mı? StringReader kullanmaya ne dersiniz ?
Aksi takdirde, StringBufferInputStream kullanabilirsiniz , ancak karakter dönüştürme sorunları nedeniyle kullanımdan kaldırılmıştır (bu nedenle StringReader'ı tercih etmelisiniz).
@Dan ile aynı soru - neden StringReader olmasın?
InputStreamReader olması gerekiyorsa, o zaman:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
byte[] bytes = charset.getBytes();
A) Readerişlevselliğinden InputStreamReaderveya b) InputStreamişlevsellikten çıkmaya InputStreamReadermı çalışıyorsunuz? B) elde edemezsiniz. InputStreamReaderbir değil InputStream.
Amacı, InputStreamReaderbir almaktır InputStreambir şeklinde karakter bayt ve deşifre - bayt bir kaynak - Reader. Verilerinizi char (orijinal Dizeniz) olarak zaten aldınız. String'inizi baytlara kodlamak ve baytları karakterlere geri çözmek gereksiz bir işlemdir.
ReaderKaynağınızdan çıkmaya çalışıyorsanız kullanın StringReader.
Bir InputStream(yalnızca size bayt veren) almaya çalışıyorsanız, IOUtils.toInputStream(..)burada diğer yanıtların önerdiği şekilde apache ortaklarını kullanın .