我正在寻找一些实用的类/方法,用于将一个大的
如果
但是,当这个String很大(1MB,10MB或更多)时,在现场分配一个1到2倍(或更多?)于我的String的字节数组。(而且由于在所有编码完成之前不知道准确需要分配多少字节,我认为必须在最终字节数组分配之前分配其他数组/缓冲区。)
我有性能要求,想要优化此操作。
理想情况下,我认为,我正在寻找的类/方法将一次仅对一个小块字符进行编码,随着InputStream被消耗,而没有大量的内存分配。
查看apache commons IOUtils.toInputStream(..)的源代码,我发现它也一次将String转换为一个大的字节数组。
而StringBufferInputStream已被弃用,无法正常工作。
是否有来自任何地方的util类/方法?还是我只需写几行代码即可?
这个的功能需求是,在其他地方,我使用了一个util方法,需要一个InputStream并从这个InputStream流出字节。
我没有看到其他人寻找这样的东西。我是不是错了?
我已经开始编写一个自定义类,但如果有更好/适当/正确的解决方案/纠正我的需求,我就会停止。
String
转换成 InputStream
。如果
String
很小,我可以这样做:InputStream is = new ByteArrayInputStream(str.getBytes(<charset>));
但是,当这个String很大(1MB,10MB或更多)时,在现场分配一个1到2倍(或更多?)于我的String的字节数组。(而且由于在所有编码完成之前不知道准确需要分配多少字节,我认为必须在最终字节数组分配之前分配其他数组/缓冲区。)
我有性能要求,想要优化此操作。
理想情况下,我认为,我正在寻找的类/方法将一次仅对一个小块字符进行编码,随着InputStream被消耗,而没有大量的内存分配。
查看apache commons IOUtils.toInputStream(..)的源代码,我发现它也一次将String转换为一个大的字节数组。
而StringBufferInputStream已被弃用,无法正常工作。
是否有来自任何地方的util类/方法?还是我只需写几行代码即可?
这个的功能需求是,在其他地方,我使用了一个util方法,需要一个InputStream并从这个InputStream流出字节。
我没有看到其他人寻找这样的东西。我是不是错了?
我已经开始编写一个自定义类,但如果有更好/适当/正确的解决方案/纠正我的需求,我就会停止。
String
在内部是一个char
数组,而char
有两个字节长。更重要的是,你甚至没有考虑编码问题... - fge