Я играю с библиотекой NIO. Я пытаюсь прослушать соединение на порту 8888 и после принятия соединения сбросить все из этого канала в somefile
.
Я знаю, как это сделать с помощью ByteBuffers
, но я хотел бы заставить это работать с якобы суперэффективным FileChannel.transferFrom
.
Вот что я получил:
ServerSocketChannel ssChannel = ServerSocketChannel.open();
ssChannel.socket().bind(new InetSocketAddress(8888));
SocketChannel sChannel = ssChannel.accept();
FileChannel out = new FileOutputStream("somefile").getChannel();
while (... sChannel has not reached the end of the stream ...) <-- what to put here?
out.transferFrom(sChannel, out.position(), BUF_SIZE);
out.close();
Итак, мой вопрос: как мне выразить "transferFrom
некоторого канала до достижения конца потока"?
Edit: Заменил 1024 на BUF_SIZE, так как размер используемого буфера не имеет значения для вопроса.