Я занимаюсь разработкой клиент-серверной системы на Java. Я отправляю сообщения по каналу TCP с сериализованными объектами.
Мне также нужно будет отправлять файлы. Я мог бы просто определить свой собственный класс сообщений:
public class SendFile implements Serializable {
private byte[] fileContents;
...
}
и отправь. Это создает проблему, если у нас большой файл, поскольку, насколько я понимаю, он попытается сохранить все в памяти перед отправкой файла на другую сторону.
Я прочитал о Externalizable
, но это будет не лучше, если файл все еще будет считываться во всю память моего компьютера перед отправкой по каналу TCP. Мне нужен какой-то "ленивый" способ сделать это (чтение с диска при отправке по сети и удаление из памяти того, что уже прочитано).
Какой самый чистый способ решения этой проблемы? В худшем случае я мог бы просто разделить это на маленькие кусочки, но я хотел бы избежать этого, если это возможно.
EDIT:
Конечно, я мог бы просто открыть поток в файле и "отправить его". Но это подразумевало бы обработку файла и всех других сообщений разными способами, чего я хотел бы избежать.
Спасибо