gpt4 book ai didi

java - IOUtils.toString 花费很长时间

转载 作者:行者123 更新时间:2023-11-30 03:03:51 26 4
gpt4 key购买 nike

我有一个类,它打开 HTTP 服务器并监听端口。回复是一个 http-header 加上一个 json 对象。该类从服务器获取输入流,将其转换为字符串,过滤 http header 并解析 json 对象。

问题是从输入流到字符串的转换大约需要 3 秒。有没有办法更快地读取输入流?

public class GamestateListener {

private static int PORT = 3001; // Port specified in your cfg
public static ServerSocket listenServer;
private static JSONObject MYJSONOBJ;

public GamestateListener() {
try {
listenServer = new ServerSocket(PORT); // open new Server Socket
System.out.println("Started Socket..."); // printing out started
// listening
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public JSONObject listenAndParseJSON() throws IOException {

System.out
.println("Listening for connection on port " + PORT + " ...."); // printing
// out
// started
// listening

try (Socket socket = listenServer.accept()) { // wait for connection

System.out.println("Start get From Socket "
+ System.currentTimeMillis());
InputStream mis = socket.getInputStream();
System.out.println("Stop get From Socket "
+ System.currentTimeMillis());
String responseString = IOUtils.toString(mis, "UTF-8");
System.out.println("Stop to String "
+ System.currentTimeMillis());
MYJSONOBJ = new JSONObject(responseString.substring(responseString
.indexOf("{")));// split the response string

return MYJSONOBJ;// return the json obj

} catch (Exception e) {
MYJSONOBJ = new JSONObject("{ERROR:True}");// create error obj
return MYJSONOBJ;// return it
}

}

}

最佳答案

你没有衡量你认为的自己。这里:

System.out.println("Start get From Socket           "
+ System.currentTimeMillis());
InputStream mis = socket.getInputStream();
System.out.println("Stop get From Socket "
+ System.currentTimeMillis());

...您似乎认为当 getInputStream() 返回时您已经读取了所有数据。你还没有。您刚刚获得了一个可以读取的流。这意味着存在某种联系,但仅此而已。

如果您想测量仅读取所有数据(而不是实际处理它)需要多长时间,您可以执行以下操作:

System.out.println("Start get From Socket           "
+ System.currentTimeMillis());
InputStream mis = socket.getInputStream();
byte[] buffer = new byte[8192];
// Read all the data (but ignore it)
while ((mis.read(buffer)) != -1) ;
System.out.println("Stop get From Socket "
+ System.currentTimeMillis());

当然,其余代码将不会有任何数据需要读取,但您会看到仅读取数据需要多长时间。我的猜测是大约需要 3 秒...这可能是由于网络速度慢,或者客户端需要很长时间才能发送所有数据。 (它可以连接, hibernate 2.9 秒,然后发送一堆数据。)

关于java - IOUtils.toString 花费很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35298185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com