#java
#java
Вопрос:
с помощью этого кода я получаю задержку с сервера, но я не могу защитить ее в переменной.
Я уже пробовал это, но, к сожалению, я новичок в Java и не могу решить эту проблему. Как я могу получить среднюю задержку в переменной в миллисекундах (мс)?
Спасибо за помощь!
Редактировать: мне нужна средняя задержка, поэтому мне просто нужно значение «Mittelwert» — в этом примере значение «25» в переменной. Итак, я добавил код из J.Doe в свой код и изменил «time» на «Mittelwert» и изменил
«String timeWithValue = s.split(» = «)[2];»
«Строковое значение = timeWithValue.split(«ms»)[0]»
Итак, этот код необходимо вставить в код, тогда средняя задержка в виде «Mittelwert» будет сохранена в переменной «latency».
Но теперь выходные данные не возвращают «среднюю задержку: 25». Средняя задержка вообще не возвращается. Кто-нибудь знает, почему это происходит?
System.out.println("here is the average latency :n");
double latency = 0.0;
while ((s = stdInput.readLine()) != null)
{
if (s.contains("Mittelwert")) {
String timeWithValue = s.split(" = ")[2];
String value = timeWithValue.split("ms")[0];
latency = Double.parseDouble(value);
System.out.println("latency " latency);
}
}
Output:
Here is the standard output of the command:
Ping wird ausgef?hrt f?r 74.125.236.73 [2a00:1f78:fffd:9::d435:9868] mit 32 Bytes Daten:
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=26ms
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=25ms
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=25ms
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=29ms
Ping-Statistik f?r 2a00:1f78:fffd:9::d435:9868:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
(0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 25ms, Maximum = 29ms, Mittelwert = 26ms
Here is the standard error of the command (if any):
here is the average latency :
import java.io.*;
import java.util.*;
public class JavaPingExampleProgram
{
public static void main(String args[])
throws IOException
{
// create the ping command as a list of strings
JavaPingExampleProgram ping = new JavaPingExampleProgram();
List<String> commands = new ArrayList<String>();
commands.add("ping");
//commands.add("-c");
//commands.add("5");
commands.add("74.125.236.73");
ping.doCommand(commands);
}
public void doCommand(List<String> command)
throws IOException
{
String s = null;
ProcessBuilder pb = new ProcessBuilder(command);
Process process = pb.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
// read the output from the command
System.out.println("Here is the standard output of the command:n");
while ((s = stdInput.readLine()) != null)
{
System.out.println(s);
}
// read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):n");
while ((s = stdError.readLine()) != null)
{
System.out.println(s);
}
}
}
Output:
Here is the standard output of the command:
Ping wird ausgef?hrt f?r 74.125.236.73 [2a00:1f78:fffd:9::d435:9868] mit 32 Bytes Daten:
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=26ms
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=25ms
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=24ms
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=25ms
Ping-Statistik f?r 2a00:1f78:fffd:9::d435:9868:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
(0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 24ms, Maximum = 26ms, Mittelwert = 25ms
Here is the standard error of the command (if any):
Комментарии:
1. Знаете ли вы, где
String
передаются файлы, содержащие задержку?2. У вас есть текстовые данные, поступающие через ваш вызов stdInput.readLine(). Вместо того, чтобы печатать это, вы могли бы применить к нему регулярное выражение, чтобы извлечь значение задержки, а затем вы могли бы преобразовать эту строку в значение с плавающей запятой. — Можете ли вы показать нам результат, который вы получаете? (укажите это в вопросе, а не в комментарии, пожалуйста)
Ответ №1:
если ваш вывод похож
PING google.de (216.58.208.35): 56 data bytes
64 bytes from 216.58.208.35: icmp_seq=0 ttl=118 time=22.126 ms
64 bytes from 216.58.208.35: icmp_seq=1 ttl=118 time=27.877 ms
64 bytes from 216.58.208.35: icmp_seq=2 ttl=118 time=18.077 ms
64 bytes from 216.58.208.35: icmp_seq=3 ttl=118 time=33.099 ms
попробуйте это:
while ((s = stdInput.readLine()) != null)
{
if (s.contains("time")) {
String timeWithValue = s.split(" ")[6];
String value = timeWithValue.split("=")[1];
double latency = Double.parseDouble(value);
System.out.println(latency);
}
}
Комментарии:
1. Я думаю, вам нужно изменить индекс массива первого разделения с 6 на 3. Какой из них вы пробовали?
2. Ах, и я вижу, вам также придется извлечь число из единицы после второго разделения: 24 мс
3.Я думаю, вы получаете IndexOutOfBounds, потому что ваш более поздний ввод также содержит дух времени
Ca. Zeitangaben