How do I turn a String into a InputStreamReader in java?
如何将String值转换为InputStreamReader?
BytearrayInputstream还可以实现以下功能:
- 您可能希望继承平台的默认字符集。
- 谢谢。完成。检测平台默认字符集的最佳方法是什么?
- charset.defaultcharset…
- 或者只使用getBytes()而不使用参数…可以说,它不应该存在,但它将使用默认编码。
- EDCOX1的0个方面:因为:JDK1.0没有一点理由认为这个类是"自Java 1.4"。错误的版本号特别奇怪,因为Java 1.4引入了EDCOX1×1,并且在相同的版本中引入API及其概念继承者是没有意义的。
我还发现了Apache Commons IOUtils类,因此:
- 转换字符串->字节[]或相反,而不提及字符编码几乎总是一个错误。
- 这可能会导致数据丢失,具体取决于默认的平台编码和字符串中的字符。为编码和解码操作指定Unicode编码会更好。详细信息请阅读:illegalargumentexception.blogspot.com/2009/05/…
- 在某种编码中,不需要编码参数来获取字节吗?我认为,只要为字符串getbytes调用选择与为inputstreamreader构造函数选择相同的编码,那么选择哪一个并不重要。我很肯定约阿希姆和麦克道尔在这个特定的案件中是错的。在字符串周围包装InputStreamReader不需要编码知识。
- @我知道,我只是看到了这个迟来的回复。如果默认平台编码不支持字符串中的代码点,将导致数据丢失。如果您的默认编码是UTF-8,没问题。如果您在Windows上运行,则会丢失大部分Unicode集,因为这些JRE默认为传统的"ansi"编码。证据在我发布的链接中。new InputStreamReader(IOUtils.toInputStream(myString,"UTF-16"),"UTF-16")将是无损的。
- 万岁,用第三方图书馆把一个一行变成…一个更大的一行。更不用说把String转换成byte[]数组,把字节转换回char,然后……
- 实际上看一下实现:IOUtils.toInputStream(myString, StandardCharsets.UTF_8)还创建了一个bytearrayinputstream:new ByteArrayInputStream(input.getBytes(Charsets.toCharset(encoding)))。
它必须是专门的inputstreamreader吗?使用StringReader怎么样?
否则,可以使用stringbufferinputstream,但由于字符转换问题(这就是为什么您应该更喜欢stringreader),它被弃用。
和@dan一样的问题-为什么不使用StringReader?
如果必须输入流阅读器,则:
- 很好,但是第二行应该是byte[] bytes = charset.getBytes();。
- 我不这么认为。在我的示例中,string是希望使用inputstreamreader访问的字符串的实例。
你是想从InputStreamReader中获得a)Reader功能,还是从InputStreamReader中获得b)InputStream功能?你不会得到b)。InputStreamReader不是InputStream。
InputStreamReader的目的是取一个InputStream(字节的来源)并以Reader的形式将字节解码为字符。您已经将数据作为字符(原始字符串)保存。将字符串编码为字节并将字节解码回字符将是一个冗余操作。
如果您试图从源代码中获取Reader,请使用StringReader。
如果你想得到一个InputStream(只给你字节),使用apache commons IOUtils.toInputStream(..),正如这里其他答案所建议的那样。
你可以试试仙人掌:
那么,如果你需要一个Reader:
1
| Reader reader = new ReaderOf (stream ); |