Bir Dizeyi Java'da bir InputStream'e nasıl dönüştürebilirim?


Yanıtlar:


1410

Bunun gibi:

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

Bunun, UTF-8 olarak kodlanmış orijinal dizenizi temsil eden bir bayt akışı olan bir InputStream istediğinizi varsaydığını unutmayın .

Az 7'den daha Java sürümleri için değiştirin StandardCharsets.UTF_8ile "UTF-8".


1
Bu karakter kümesi yapılırken kaybolmaz: String -> bytes -> ByteArrayInputStream? Örneğin "ü" de denendiğinde, baytlarda doğru harf olur, ancak ByteArrayInputStream doğru dönüşümü kaybetmiş olacaktır. Yoksa yanılıyor muyum?
Jonathan Ramos

20
StandardCharsets minimum API düzeyi 19 gerektirir.
Nantoka

3
@JonathanRamos dönüşümü yapmak akışa bağlı değil. Baytları dizgilere geri çözen her şeye bağlıdır.
Cruncher

26
@Nantoka StandardCharsets.UTF_8 yerine herhangi bir API Düzeyi için Charset.forName ("UTF-8") kullanabilirsiniz.
PJ_Finnegan

onun işi sadece i eklemek String newStr = URLDecoder.decode (URLEncoder.encode (yanıt, "iso8859-1"), "UTF-8"); için (utf8)
sirmagid

275

Apache Commons IO kullanmanın hayatımı daha kolay hale getirdiğini düşünüyorum.

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

Kütüphanenin, projenizde kullanabileceğiniz yaygın olarak yapılmış görevlere başka birçok kısayol sunduğunu da görebilirsiniz.


5
Yeni ByteArrayInputStream (exampleString.getBytes ("UTF-8")) kullandılar. Bu nedenle InputStream stream = new ByteArrayInputStream (exampleString.getBytes ("UTF-8"));
Pankaj Kumar

9
@PankajKumar: Java'nın JIT derleyicisi bunu satır içine almaktan daha fazlası.
Andrew White

8
Kodlamayı belirtmeyen bir yöntem kullanmak korkunç bir fikirdir ...
b1nary.atr0phy

2
@ b1naryatr0phy: Apache commons, bu yöntemin kodlamayı ikinci bir parametre olarak alan başka bir biçimini içerir (bu, haklısınız, tercih edilir): InputStream in = IOUtils.toInputStream (kaynak, "UTF-8");
Cuga

8
StandardCharsets.UTF_8Düz metin yerine tanım kullanabilirsiniz .
douglaslps

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.