У меня есть домашнее задание для создания простого механизма передачи данных с парой сокетов клиент-сервер TCP путем перенаправления стандартного ввода-вывода. У меня фактически это работает, но когда я пытаюсь передать большие файлы (скажем, ~ 5g), скорость резко замедляется. Я использую BufferedInputStream и BufferedOutputStream, и я думаю, что, возможно, есть некоторая оптимизация, которую я могу сделать там. Код для моего сервера:
private static final int BUF_SIZE = 2047;
public static void main(String[] args) throws IOException{
/*
* Attempt to parse command line arguments.
* @require args[0] is an int
*/
int port = 0;
try {
port = Integer.parseInt(args[0]);
} catch(NumberFormatException e) {
System.err.println("Port must be an integer in range 0 - 65535.");
System.exit(-1);
}
/*
* Bind server socket to specified port number and wait for request.
* @require port >= 0 && port <= 65535
*/
ServerSocket welcomeSocket = null;
welcomeSocket = new ServerSocket(port);
System.out.println("Now listening on port: " + port);
/*
* Accept connection from client socket.
*/
Socket connectionSocket = null;
connectionSocket = welcomeSocket.accept();
System.out.println("Client made connection");
BufferedInputStream input;
BufferedOutputStream output;
if(System.in.available() > 0) {
input = new BufferedInputStream(System.in, BUF_SIZE);
output = new BufferedOutputStream(
connectionSocket.getOutputStream(), BUF_SIZE);
} else {
input = new BufferedInputStream(
connectionSocket.getInputStream(), BUF_SIZE);
output = new BufferedOutputStream(System.out, BUF_SIZE);
}
int place;
while((place = input.read()) != -1)
output.write(place);
input.close();
output.close();
welcomeSocket.close();
connectionSocket.close();
}
Код клиента по сути тот же. Я пытался использовать разные размеры буфера, в том числе по умолчанию (без указания размера буфера), но все они работают примерно с одинаковой скоростью. Какие-нибудь указатели на то, как я могу увеличить свою производительность?
Спасибо за ваше время!