그리고 여기가를 제외하고이 스레드 Java TCP socket: data transfer is slow
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Transfer {
public static void main(String[] args) {
final String largeFile = "/home/dr/test.dat"; // REPLACE
final int BUFFER_SIZE = 65536;
new Thread(new Runnable() {
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(12345);
Socket clientSocket = serverSocket.accept();
long startTime = System.currentTimeMillis();
byte[] buffer = new byte[BUFFER_SIZE];
int read;
int totalRead = 0;
InputStream clientInputStream = clientSocket.getInputStream();
while ((read = clientInputStream.read(buffer)) != -1) {
totalRead += read;
}
long endTime = System.currentTimeMillis();
System.out.println(totalRead + " bytes read in " + (endTime - startTime) + " ms.");
} catch (IOException e) {
}
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
Socket socket = new Socket("localhost", 12345);
FileInputStream fileInputStream = new FileInputStream(largeFile);
OutputStream socketOutputStream = socket.getOutputStream();
long startTime = System.currentTimeMillis();
byte[] buffer = new byte[BUFFER_SIZE];
int read;
int readTotal = 0;
while ((read = fileInputStream.read(buffer)) != -1) {
socketOutputStream.write(buffer, 0, read);
readTotal += read;
}
socketOutputStream.close();
fileInputStream.close();
socket.close();
long endTime = System.currentTimeMillis();
System.out.println(readTotal + " bytes written in " + (endTime - startTime) + " ms.");
} catch (Exception e) {
}
}
}).start();
}
}
에서 좋은 예이다이 두 패키지의 문서를 읽어해야합니다 Java + TCP는 느리지 않습니다. PC에서 소켓을 통해 2.6GB/s를 전송할 수 있습니다. (마이크로 벤치 마크가 아닌 실제 응용 프로그램에서) 테스트 목적으로 새로운 스레드를 시작하지 않고 클라이언트 및 서버 소켓을 작성할 수 있습니다. –
표준 LAN 장비에 2.5GB/s (GiB)를 전송하는 것은 현재 물리적으로 불가능합니다. 귀하의 주장은 평범하지 않은 헛소리입니다. 그건 업계 수준의 하드웨어를 필요로 할 것이고, 당신은 그다지 확신 할 수 없을 것입니다. – specializt
@specializt 당신은 완전히 틀렸어. 표준 LAN 장비는 TCP를 통해 2.5GB/s를 전송할 수 있습니다. 1 ~ 2 분 정도 생각하면 잘못된 가정을하게됩니다. –