Стоит задача написать некое подобие DownloadManager'a на Java.
Т.е. на вход подается некий удаленный файл, который мы читаем в несколько потоков и записываем на локальный диск.
Технические сложности возникли с чтением файла в несколько потоков и соответственно с записью файла в несколько потоков...
Как я делаю:
разбиваю файл на N частей, каждая часть читается с определенной позиции и пишется в соответственную позицию отдельным потоком.
Для чтения с определенного места использую
InputStream.mark()
, для записи
RandomAccessFile.seek()
.
Но в результате выполнения получаю фантомные IOExceptions Write error. Возможно это результат проблемы с синхронизацией.
Вопрос, поддерживает ли Java многопоточное чтение с одного InputStream (markable()==true), и поддерживается многопоточная запись в RandomAccessFile? Какие есть другие альтернативы и\или возможные причины проблемы?