Java中大字符串的唯一字符串对象
在内存管理和性能方面,在一个单独的字符串对象中存储一个大字符串(超过300000个字符)是一种好的做法还是有更好的方法 Java使用Java中大字符串的唯一字符串对象,java,string,Java,String,在内存管理和性能方面,在一个单独的字符串对象中存储一个大字符串(超过300000个字符)是一种好的做法还是有更好的方法 Java使用UTF-16编码表示字符串,因此在最坏的情况下,每个字符都是4字节。这将为您提供一个大约为4*300000/1024/1024~1.14MB的字符串,它本身并不坏 使用字符串的方式决定了练习。Johan Sjöberg的解释很好: “如何使用字符串将决定实践。” 如果组成字符串对象的300000个字符没有驻留在双引号(“”)中的Java源文件中,例如驻留在外部文件中
UTF-16
编码表示字符串,因此在最坏的情况下,每个字符都是4
字节。这将为您提供一个大约为4*300000/1024/1024~1.14MB的字符串,它本身并不坏
使用字符串的方式决定了练习。Johan Sjöberg的解释很好:
“如何使用字符串将决定实践。”
如果组成字符串对象的300000个字符没有驻留在双引号(“”)中的Java源文件中,例如驻留在外部文件中,则可以使用不同的技术逐块或整体获取字符串内容。看看这个例子:
FileInputStream fis = new FileInputStream( "yourFile.txt" );
BufferedInputStream bis = new BufferedInputStream( fis );
byte [] buffer = new byte [ 8 ];
int bytesRead = 0;
String chunk = "";
while ( ( bytesRead = bis.read( buffer ) ) != -1 )
chunk = new String( buffer, 0, bytesRead );
假设您处理了可能的异常,在上面的代码中,每次进入while循环时都会得到一个大小为8字节的字符串。因此,通过修改字节数组的大小(在这段代码中为8),您可以更改块大小,并在其他任何地方使用块,打印它们等等
在您的示例中,您说您的字符串大约有300000个字符。因此,将字节数组缓冲区的大小设置为4x300000=1200000将使您能够获得包含所有字符的单个字符串块