Jar*_*aus 92 java string inputstream
我有一个String我想用作的InputStream.在Java 1.0中,你可以使用java.io.StringBufferInputStream,但是@Deprecrated(有充分的理由 - 你不能指定字符集编码):
此类不能将字符正确转换为字节.从JDK 1.1开始,从字符串创建流的首选方法是通过
StringReader类.
您可以创建一个java.io.Readerwith java.io.StringReader,但没有适配器可以创建Reader和创建InputStream.
我找到了一个古老的虫子,要求一个合适的替代物,但是没有这样的东西存在 - 据我所知.
经常建议的解决方法是java.lang.String.getBytes()用作输入java.io.ByteArrayInputStream:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
Run Code Online (Sandbox Code Playgroud)
但这意味着将整个String内存实现为一个字节数组,并且无法实现流的目的.在大多数情况下,这不是什么大问题,但我一直在寻找能够保留流的意图的东西 - 尽可能少的数据在内存中实现(重新).
And*_*rio 78
更新:这个答案正是OP不想要的.请阅读其他答案.
对于那些我们不关心在内存中重新实现数据的情况,请使用:
new ByteArrayInputStream(str.getBytes("UTF-8"))
Run Code Online (Sandbox Code Playgroud)
Fot*_*los 18
如果您不介意对commons-io包的依赖,那么您可以使用IOUtils.toInputStream(String text)方法.
Apache Commons-IO 提供了一个从 Reader 适配到 InputStream 的适配器,名为ReaderInputStream。
示例代码:
@Test
public void testReaderInputStream() throws IOException {
InputStream inputStream = new ReaderInputStream(new StringReader("largeString"), StandardCharsets.UTF_8);
Assert.assertEquals("largeString", IOUtils.toString(inputStream, StandardCharsets.UTF_8));
}
Run Code Online (Sandbox Code Playgroud)
参考:https : //stackoverflow.com/a/27909221/5658642
好吧,一种可能的方法是:
PipedOutputStreamPipedInputStreamOutputStreamWriter可以PipedOutputStream在构造函数中指定编码)OutputStreamWriter可以从 中读取PipedInputStream!当然,这似乎是一种相当老套的方法,但至少这是一种方法。
| 归档时间: |
|
| 查看次数: |
80657 次 |
| 最近记录: |