我从以下网络代码中获得BufferedReader
。
URL url = new URL(request);
HttpURLConnection httpUrlConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = httpUrlConnection.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
1024尺寸是Android的不错选择吗?或者,我可以使用任何系统常量值吗?
int charRead = 0;
char[] buffer = new char[1024];
StringBuffer stringBuffer = new StringBuffer();
while ((charRead = bufferedReader.read(buffer)) > 0) {
stringBuffer.append(buffer, 0, charRead);
}
String line = "";
StringBuffer stringBuffer = new StringBuffer();
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line);
}
答案 0 :(得分:1)
我认为第一种方法更有效,但我宁愿设置更高的缓冲区大小。 8 * 1024。这是HttpClient中的默认CoreConnectionPNames.SOCKET_BUFFER_SIZE。 我宁愿说低于8 * 1024的东西是不合理的,因为大多数HTTP缓冲区都设置为8 * 1024。
在第二种方法中,您假设流中有新的行字符。在20MB json的情况下优化的方式是什么,没有新的行字符?这会打击你的应用程序。
一条线被认为是由换行符('\ n'),回车符('\ r')或回车符后面的任何一个终止。
在我看来,最好的选择是使用8 * 1024的乘法。上限约束与内存的大小和连接速度相关的流的缓冲处理时间。
答案 1 :(得分:1)
使用StringBuilder
被认为是StringBuffer
的更好替代方案,除非您需要使用同步StringBuffer
的开销。 (StringBuilder
是替代品)
至于性能,我会采用第一种方法并避免使用readLine()
,除非您需要将该行作为一行文本处理。此外,readLine()
不会返回实际的换行符,因此您在第二个示例中创建的数据将缺少换行符,因此可能与从服务器传输的数据不完全相同。
答案 2 :(得分:0)
可以设置更高的缓冲区限制将是最佳选择。
根据java doc
可以指定缓冲区大小,也可以使用默认大小。对于大多数用途,默认值足够大。
缓冲是更好的方法。再次按照文档
没有缓冲,read()或readLine()的每次调用都可能导致从文件中读取字节,转换为字符,然后返回,这可能是非常低效的。