2017-02-09 6 views
0

Я читал о DatagramChannel в одном из учебника website.They объяснил следующую программу образцаясно() метод ByteBuffer в Java

String newData = "New String to write to file..." 
        + System.currentTimeMillis(); 

ByteBuffer buf = ByteBuffer.allocate(48); 
buf.clear(); 
buf.put(newData.getBytes()); 
buf.flip(); 

int bytesSent = channel.send(buf, new InetSocketAddress("example.com", 80)); 

Они добавили buf.clear линии() после того, как созданный класс ByteBuffer объект. clear() предназначен для очистки буфера. Но сначала нам не нужно очищать право, если это необходимо там, то почему мы должны использовать?. спасибо. (Извините, если какие-либо ошибки в грамматике)

ответ

2

Возможно, это просто плохой учебник/веб-сайт. Это не нужно в ситуации, когда вы только что выделили новый ByteBuffer. Вы можете просто использовать

ByteBuffer buf = ByteBuffer.wrap(newData.getBytes()); 

, чтобы избавиться от put() и flip() тоже.

+0

flip() используется для изменения режима (от/до) записи (в/из) режима чтения. Каков режим по умолчанию? если он является режимом записи, buf.flip() ошибочен до канала. send (buf, новый InetSocketAddress («example.com», 80)); лайн или это бессмысленно только писать право ??? –

+2

Нет режима чтения или режима записи. Flip просто переворачивает буфер, устанавливая положение на 0 и ограничивая старую позицию, как объясняет javadoc. – Kayaman

Смежные вопросы