我不习惯使用Java中的流 - 如何从InputStream
创建String
?
答案 0 :(得分:143)
你走了:
InputStream is = new ByteArrayInputStream( myString.getBytes() );
更新对于多字节支持使用(感谢 Aaron Waibel 的评论):
InputStream is = new ByteArrayInputStream(Charset.forName("UTF-16").encode(myString).array());
请参阅ByteArrayInputStream手册。
在上面的String#getBytes(charset)方法中使用charset参数是安全的。
在JDK 7+之后,您可以使用
java.nio.charset.StandardCharsets.UTF_16
而不是硬编码的编码字符串:
InputStream is = new ByteArrayInputStream(StandardCharsets.UTF_16.encode(myString).array());
答案 1 :(得分:33)
你可以这样做:
InputStream in = new ByteArrayInputStream(string.getBytes("UTF-8"));
请注意UTF-8
编码。您应该指定要编码的字节的字符集。如果您不需要任何其他内容,则选择UTF-8
是很常见的。否则,如果您不选择任何内容,您将获得可在系统之间变化的默认编码。来自JavaDoc:
未指定此字符串无法在默认字符集中进行编码时此方法的行为。当需要更多地控制编码过程时,应该使用CharsetEncoder类。
答案 2 :(得分:4)
InputStream in = new ByteArrayInputStream(yourstring.getBytes());
答案 3 :(得分:2)
Java 7 +
可以利用StandardCharsets
JDK类:
String str=...
InputStream is = new ByteArrayInputStream(StandardCharsets.UTF_16.encode(str).array());
答案 4 :(得分:1)
从Java 7开始,您可以使用以下习语:
String someString = "...";
InputStream is = new ByteArrayInputStream( someString.getBytes(StandardCharsets.UTF_8) );
答案 5 :(得分:0)
使用来自Google的Guava的com.google.common.base.Charsets而不是CharSet.forName(http://code.google.com/p/guava-libraries/wiki/StringsExplained#Charsets)稍微好一些:
InputStream is = new ByteArrayInputStream( myString.getBytes(Charsets.UTF_8) );
您使用的CharSet完全取决于您当前要对InputStream执行的操作。