Tôi phải chuyển ~ 100MB dữ liệu qua ServerSocket bằng NIO, nhưng tôi không thể tìm ra cách thực hiện điều này mà không cần chuyển bất kỳ nơi nào/giữ trạng thái chuyển.Java - Chuyển các tệp lớn qua các kênh - NIO
Ý tưởng đầu tiên của tôi là gửi kích thước tệp, dường như tôi không thể gửi kích thước của các tệp lớn đó vì nó thậm chí không phù hợp với RAM cùng một lúc. Sau đó, tôi nghĩ, tại sao không chỉ chuyển đến khi không có gì được nhận, nhưng thats khi vấn đề đi kèm trong.
Thậm chí nếu tôi ghi dữ liệu máy chủ mặt mọi lúc
FileChannel fc = new FileInputStream(f).getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while(fc.read(buffer) > 0) {
buffer.flip();
while(channel.write(buffer) > 0);
buffer.clear();
}
nhưng vì có phải phá vỡ trong chuyển tập tin một số thời gian đọc dữ liệu liên tục và phá vỡ khi không có gì là có sẵn là ý tưởng tồi.
Tôi không thể hiểu làm thế nào tôi có thể nói với khách hàng nếu vẫn còn dữ liệu sẵn có mà không phải gửi từng đoạn dữ liệu dưới dạng gói mới với mã opcode, v.v.
Tôi cũng tự hỏi nếu cách theres tốt hơn để gửi toàn bộ đệm hơn dưới
while(channel.write(buffer) > 0);
Tôi đã trả lời một phần của điều này nhưng tôi phải nói rằng tôi không hiểu ý bạn là gì "có phải mất thời gian chuyển tập tin" và "đọc dữ liệu liên tục và phá vỡ khi không có gì là ý tưởng tồi ". Vui lòng giải thích. – EJP