Можете ли вы дать мне вывод этой программы?
public class SimpleServer {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(6666);
Socket socket = server.accept();
OutputStream output = socket.getOutputStream();
byte[] bytes = new byte[32*1024]; // 32K
while (true) {
output.write(bytes);
}
}
}
public class SimpleClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 6666);
InputStream input = socket.getInputStream();
long total = 0;
long start = System.currentTimeMillis();
byte[] bytes = new byte[32*1024]; // 32K
for(int i=1;;i++) {
int read = input.read(bytes);
if (read < 0) break;
total += read;
if (i % 500000 == 0) {
long cost = System.currentTimeMillis() - start;
System.out.printf("Read %,d bytes, speed: %,d MB/s%n", total, total/cost/1000);
}
}
}
}
на моей машине печатает
Read 25,586,204,672 bytes, speed: 5,245 MB/s
Read 53,219,426,304 bytes, speed: 5,317 MB/s
Read 85,018,968,064 bytes, speed: 5,416 MB/s
Read 117,786,968,064 bytes, speed: 5,476 MB/s
Попробуйте отправить 32K блоков много раз (не менее 2 секунд), и вы получите 400 МБ / с или более. например не менее 10000 раз.
На очень быстрой машине вы можете получить 1 ГБ / с на одном клиенте. С несколькими клиентами вы можете получить 8 ГБ / с.
Вот пример
Повышение эффективности передачи файлов Java
Если у вас есть карта на 100 МБ, вы можете ожидать около 11 МБ / с (байт в секунду).
Аналогично для Ethernet на 1 ГБ ожидается около 110 МБ / с
Для Ethernet 10 Гбит-E вы можете получить до 1 ГБ / с, но вы можете получить только половину этой системы Unles Syour с высокой настройкой.