0

サーバーからクライアントにファイルを送信する方法は?

サーバーとクライアントがあり、どちらもメッセージを相互に送信できます。クライアントでリクエストを送信すると、サーバーにメッセージが送信され、サーバーはそのファイルシステムにファイルを作成し、1行ごとにクライアント行に送信します。

クライアント:

socket = new Socket(InetAddress.getByName(address), Integer.parseInt(port));
writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
writer.println("GD"); // GD stands for get data

サーバ:

ServerSocket serverSocket = new ServerSocket(Integer.parseInt(port), 0, InetAddress.getByName(address));
socket = serverSocket.accept();
OutputStream writer = socket.getOutputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

// SNIP - readline happens in a thread etc. Not important

String line = reader.readLine();

if("GD".equals(line)) {
    File dataFile = getDataFile();

    BufferedReader br = new BufferedReader(new FileReader(dataFile));
    String line;

    while(null != (line = br.readLine())) {
        writer.send("FD;" + line);
        // FD stands for file data so my client knows that it's a line from the requested file
    }
}

私のファイルがかなり大きい場合 (数十万行としましょう)、それは私のサーバーが行ごとにデータ行を送信する必要があることを意味します。言うまでもなく、ファイルを読み取り、そのメモリを使用して文字列を保存してから送信する必要があります。非常に非効率に感じます。

この多くのリソースを無駄にすることなく、サーバーからクライアントにファイルを送信する方法があるかどうか疑問に思っていました。誰でもこれで私を助けることができますか?

要するに、ファイルをストリーミングして行ごとに送信することなく、サーバーからクライアントにファイルを送信できますか。

4

1 に答える 1