2 回答

TA貢獻(xiàn)1911條經(jīng)驗 獲得超7個贊
這是你的答案。
我編寫了一個簡單的代碼,可以為您完成所有性能測試:
import java.util.*;
import java.io.*;
import java.time.format.DateTimeFormatter;
import java.time.LocalDateTime;
public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
String response = "";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
//STEP 1
InputStream in = new ByteArrayInputStream("MYSTREAMASDasdasdSJKDFJASLKFJKSDLFJLKSADJFKSJDKAFJKSDJFLKSDJLKFJLKSDFJLKSDJLKLAKSDJLJKFSDKJADFSLJKLKJSDALJKALJKS adkaslkdajslkdjkaslkdjlaks\nasdasdasdasdasdasdasdasdasdasdasdasdasdas".getBytes());
System.out.println("FIRST OPTION");
long beginTime = System.nanoTime();
//System.out.println("begin -" + beginTime);
for (int i = 0; i < 500000; i++) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int length = 0;
while ((length = in .read(buffer)) != -1) {
baos.write(buffer, 0, length);
}
response = new String(baos.toByteArray());
}
long endTime = System.nanoTime();
System.out.println(endTime - beginTime);
//STEP 2
System.out.println("SECOND OPTION");
beginTime = System.nanoTime();
for (int i = 0; i < 500000; i++) {
response = "";
BufferedReader br = new BufferedReader(new InputStreamReader( in ));
String output;
while ((output = br.readLine()) != null) {
response = output;
}
}
endTime = System.nanoTime();
System.out.println(endTime - beginTime);
System.out.println("THIRD OPTION");
beginTime = System.nanoTime();
for (int i = 0; i < 500000; i++) {
StringBuilder sb = new StringBuilder();
for (int c;
(c = in .read()) >= 0;)
sb.append((char) c);
response = sb.toString();
}
endTime = System.nanoTime();
System.out.println(endTime - beginTime);
}
}
這里有 500K 循環(huán)執(zhí)行的結(jié)果:
第一個選項 284684443 毫秒
第二個選項 1331922335 毫秒
第三個選項 16031272 毫秒
正如您將看到的,第三個選項是最快的。
這是運行示例

TA貢獻(xiàn)2037條經(jīng)驗 獲得超6個贊
我已經(jīng)使用Jemeter - Java Request運行了我的代碼,根據(jù)統(tǒng)計數(shù)據(jù),1 方法顯示了與其他方法相比的最佳性能。此測試使用實際的 HTTP 調(diào)用運行并將該響應(yīng)轉(zhuǎn)換為字符串。
方法 01 成功執(zhí)行操作:完整:1.393 秒,轉(zhuǎn)換:0.001秒
方法 02 成功執(zhí)行操作:完整:1.502 秒,轉(zhuǎn)換:0.021秒
方法 03 成功執(zhí)行操作:完整:1.709 秒,轉(zhuǎn)換:0.015秒
海灘標(biāo)記代碼在這里:- https://github.com/idthusitha/ride-test
添加回答
舉報