http://www.coderpanda.com/java-socket-programming-transferring-large-sized-files-through-socket/из памяти размера Java кучи
Код в приведенной выше ссылке, но работает Шифрование до определенного количества данных могут быть переданы. когда я пытался передать фильм формата .mkv размером около 334 МБ, он дает мне ошибку «из памяти, размер кучи java». Я ничья, и я не знаю, как это решить. Я попытался увеличить буферизацию в клиентской программе, но проблема все еще сохраняется. пожалуйста помогите.
Попробуйте ** уменьшить ** размер буфера или увеличить кучу JVM. –
Я не могу не заметить, что код слишком сложный для того, что он делает. Нет необходимости копировать прочитанные буферы, а фоновый поток также бесполезен. Вместо этого сервер должен запустить один фон для каждого подключения. –
Перенос больших файлов должен выполняться путем приобретения [* канала * для сокета] (http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#getChannel()) и [канал для файла] (http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#open (java.nio.file.Path,% 20java.nio .file.OpenOption ...)) вместо потоков и вызов ['targetFileChannel.transferFrom (sourceSocketChannel, 0, Long.MAX_VALUE)'] (http://docs.oracle.com/javase/7/docs/api /java/nio/channels/FileChannel.html#transferFrom(java.nio.channels.ReadableByteChannel,%20long,%20long)) для всей передачи. – Holger