Java 从BufferedReader获取字符串的更好方法是什么
我从下面的网络代码中获得了Java 从BufferedReader获取字符串的更好方法是什么,java,android,Java,Android,我从下面的网络代码中获得了BufferedReader URL url = new URL(request); HttpURLConnection httpUrlConnection = (HttpURLConnection)url.openConnection(); InputStream inputStream = httpUrlConnection.getInputStream(); bufferedReader = new BufferedReader(n
BufferedReader
URL url = new URL(request);
HttpURLConnection httpUrlConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = httpUrlConnection.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
int charRead = 0;
char[] buffer = new char[1024];
StringBuffer stringBuffer = new StringBuffer();
while ((charRead = bufferedReader.read(buffer)) > 0) {
stringBuffer.append(buffer, 0, charRead);
}
可能设置更高的缓冲限制将是最好的选择 根据java文档 可以指定缓冲区大小,也可以使用默认大小。对于大多数情况,默认值足够大 缓冲是更好的方法。再次按照文件 如果没有缓冲,每次调用read()或readLine()都可能导致从文件中读取字节,将其转换为字符,然后返回,这可能非常低效
我认为第一种方法更有效,但我宁愿设置更高的缓冲区大小,例如8*1024。这是HttpClient中的默认CoreConnectionPNames.SOCKET\u BUFFER\u大小。 我更愿意说低于8*1024是不合理的,因为大多数HTTP缓冲区都设置为8*1024 在第二种方法中,假设流中有新行字符。如果20MB json以没有新行字符的方式进行优化,该怎么办?这会毁了你的应用程序 一行被认为是由换行符('\n')、回车符('\r')或紧接着换行符的回车符中的任意一个终止的
在我看来,最好的选择是使用8*1024的乘法。上限约束与内存大小和连接速度以及流的缓冲区处理时间有关。使用
StringBuilder
被认为是StringBuffer
的更好选择,除非您需要使用同步StringBuffer
的开销。(StringBuilder
是一个替代品)
至于性能,我将使用第一种方法,并避免使用
readLine()
,除非您需要将该行作为文本行处理。另外,readLine()
不会返回实际的换行符,因此在第二个示例中创建的数据将丢失换行符,因此可能与从服务器传输的数据不完全相同。但问题是,如果我没有指定大小,我将如何构造字符数组?感谢StringBuilder提示。我差点忘了。
String line = "";
StringBuffer stringBuffer = new StringBuffer();
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line);
}