Fai*_* Ng 6 java string inputstream
我正在寻找一些实用程序类/方法来获取一个大文件String并返回一个InputStream.
如果String很小,我可以这样做:
InputStream is = new ByteArrayInputStream(str.getBytes(<charset>));
Run Code Online (Sandbox Code Playgroud)
但是当String它很大(1MB、10MB 或更多)时,会在现场分配一个字节数组,它是我的 String 的 1 到 2 倍(或更多?)。(并且由于在所有编码完成之前您不知道要分配多少字节,我认为在分配最终字节数组之前必须分配其他数组/缓冲区)。
我有性能需求,想优化这个操作。
理想情况下,我认为,我正在寻找的类/方法将在使用 InputStream 时一次一小块地对字符进行动态编码,因此不会出现内存分配的大增。
查看apache commons的源代码IOUtils.toInputStream(..),我看到它也一口气将String转换为大字节数组。
并且StringBufferInputStream已弃用,并且不能正确完成工作。
任何地方都有这样的 util 类/方法吗?或者我可以只写几行代码来做到这一点?
对此的功能需求是,在其他地方,我正在使用一个 util 方法,该方法InputStream从 this 中取出并流出字节InputStream。
我似乎没有其他人在寻找这样的东西。我在某处弄错了什么吗?
我已经开始为此编写一个自定义类,但如果有更好/正确/正确的解决方案/更正我的需要,我会停止。
Java 内置库假设您只需要在输出中从字符转换为字节,而不是输入。然而,Apache Commons IO 库有ReaderInputStream,它可以包装 aStringReader以获得您想要的内容。