第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

InputStream轉(zhuǎn)成String考慮高性能

InputStream轉(zhuǎn)成String考慮高性能

德瑪西亞99 2023-09-27 17:21:09
我已經(jīng)創(chuàng)建了rest-client java 代碼并將XML 響應(yīng)轉(zhuǎn)換為字符串。我找到了三種方法來轉(zhuǎn)換該響應(yīng)。HttpURLConnection........InputStream in = new GZIPInputStream(conn.getInputStream());Gzip使用上面的行將響應(yīng)隱藏到 InputStream 中。然后我找到了以下3種方法來轉(zhuǎn)換為String。1 方法ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[4096];int length = 0;while ((length = in.read(buffer)) != -1) {    baos.write(buffer, 0, length);}String response =new String(baos.toByteArray());2 方法String response = "";BufferedReader br = new BufferedReader(new InputStreamReader(in));String output;while ((output = br.readLine()) != null) {    response =output;}3 方法StringBuilder sb = new StringBuilder();for (int c; (c = in.read()) >= 0;)    sb.append((char) c);String response = sb.toString();我需要知道哪種是讀取 XML 響應(yīng)的最佳方式,考慮到高性能/可用性(以減少響應(yīng)時間)。此代碼將在并行進(jìn)程中每秒使用大約 50-100 個請求。請建議我。爪哇表現(xiàn)休息
查看完整描述

2 回答

?
Smart貓小萌

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 毫秒

正如您將看到的,第三個選項是最快的。

是運行示例


查看完整回答
反對 回復(fù) 2023-09-27
?
阿晨1998

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


查看完整回答
反對 回復(fù) 2023-09-27
  • 2 回答
  • 0 關(guān)注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號