Conversation
Ещё дописано команд в REPL.
Сделаны join потоков сервера.
Добавлена команда resume.
До этого для него выделялся новый id.
| /** | ||
| * | ||
| */ | ||
| private static final long serialVersionUID = 1L; |
|
|
||
| ExecutorService pool = Executors.newCachedThreadPool(); | ||
|
|
||
| Map<Integer, Future<?>> fileDownloadsFutures = new HashMap<>(); |
There was a problem hiding this comment.
если сделали старт, но не делали стоп, получается мапа будет содержать выполненные future сколь угодно долго?
|
|
||
| public void stopFileDownload(int fileId) { | ||
| if (!filesHolder.fileStatus.containsKey(fileId)) { | ||
| throw new NullPointerException("This file wasn't been downloading"); |
There was a problem hiding this comment.
это исключение про разыменование нулевого указателя, здесь скорее IllegalArgumentException/IllegalStateException/NoSuchElementException
| try { | ||
| return Math.toIntExact((files.get(fileId).length() + pieceSize - 1) / pieceSize); | ||
| } catch (IOException e) { | ||
| throw new RuntimeException(e); |
There was a problem hiding this comment.
можно еще java.io.UncheckedIOException
| } | ||
| } | ||
|
|
||
| public int pieceOffset(int fileId, int numPart) { |
| } | ||
| } catch (IOException e) { | ||
| out.println(e.getMessage()); | ||
| } catch (InterruptedException e) { |
| } catch (IOException e) { | ||
| // TODO Auto-generated catch block | ||
| e.printStackTrace(); | ||
| } |
There was a problem hiding this comment.
не очень хорошая обработка IOException
семафор может быть не релизнут и/или канал не закрыт
| dout.writeByte(1); | ||
|
|
||
| fileSizes.clear(); | ||
| filesNames.clear(); |
There was a problem hiding this comment.
лучше все-таки не менять передаваемые параметры, а результат работы "возвращать"
There was a problem hiding this comment.
и?) это же не оправдывает, в плюсах так исторически сложилось, что можно, в джаве скорее нет
| dinp.close(); | ||
| dout.close(); | ||
| s.close(); | ||
| } catch (NullPointerException npe) { |
There was a problem hiding this comment.
это совсем беда, NPE это ошибка программирования, и оно никак не может оказаться в ожидаемых исключениях, вместо этого должна использоваться проверка на null
There was a problem hiding this comment.
Кажется что это красивее чем делать три if и пытаться сообщить что кто-то оказался null.
There was a problem hiding this comment.
Сделал вместо этого проверку на null.
| dout = new DataOutputStream(s.getOutputStream()); | ||
| dinp = new DataInputStream(s.getInputStream()); | ||
|
|
||
| dout.writeByte(1); |
В частности сделал загрузку файлового дискриптора ленивой (только когда надо считать или записать кусок). Future из мапы в FilesDownloader удаляется при завершении загрузки.
Исправил catch NPE
No description provided.