在java中将输入流转换为字符串的最快方法
在java示例在java中将输入流转换为字符串的最快方法,java,string,inputstream,apache-commons-io,Java,String,Inputstream,Apache Commons Io,在java示例Guava、ApacheCommons IO和普通java类scanner类和ByteOutputStream中,有许多不同的方法将inputStream转换为字符串。 有很多关于堆栈溢出的网站和问题向您展示了如何做到这一点。但是,我想知道哪种方法最快,尤其是当inpuStream非常大时 使用BufferedReader并读取每一行并以下面的方式将其追加到字符串似乎是最常见的方法,但对于大的输入流来说速度非常慢 String inputLine; Stri
Guava
、ApacheCommons IO
和普通java类scanner
类和ByteOutputStream
中,有许多不同的方法将inputStream
转换为字符串。
有很多关于堆栈溢出的网站和问题向您展示了如何做到这一点。但是,我想知道哪种方法最快,尤其是当inpuStream
非常大时
使用BufferedReader并读取每一行并以下面的方式将其追加到字符串似乎是最常见的方法,但对于大的输入流来说速度非常慢
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
您是否已经使用过这些解决方案中的一种,并且您是否体验到它很慢?是的,我使用了字符串生成器并迭代每个缓冲行以附加到一个字符串,当该行很大或有很多行时,该字符串往往非常慢。如果您想读取一个大字符串,则应使用初始容量初始化StringBuilder:新的StringBuilder(1000000)
所需的确切容量或稍大容量最好。这加快了读取过程,因为不需要重新分配。@Robert stringBuilder的大小单位是多少?i、 e.您提到的1000000个字符还是物理内存大小?是容量直接进入StringBuilder内部的char[capacity]
。内存中的每个字符通常是一个UTF-16字符,即每个字符两个字节。