Как писать в канал с ByteBuffer

Это Java советы иллюстрирует метод записи на канал с ByteBuffer. Разработчик может использовать ByteBuffer для записи в канал. Выходного потока используется для записи на канал. Хитрая часть этой операции заключается в помню правильно определить позицию буфера, до и после записи.


    try {

        // Obtain a channel

        WritableByteChannel channel = 

          new FileOutputStream("outfilename").getChannel();

    

        // Create a direct ByteBuffer;

        ByteBuffer buffer = ByteBuffer.allocateDirect(10);

    

        byte[] bytes = new byte[1024];

        int count = 0;

        int index = 0;

    

        // Continue writing bytes until there are no more

        while (count >= 0) {

            if (index == count) {

                count = inputStream.read(bytes);

                index = 0;

            }

            // Fill ByteBuffer

            while (index < count && buffer.hasRemaining()) {

                buffer.put(bytes[index++]);

            }

    

            // Set the limit to the current position and 

            // the position to 0 making the new bytes 

            // visible for write()

            buffer.flip();

    

            // Write the bytes to the channel

            int numWritten = channel.write(buffer);

    

            // Check if all bytes were written

            if (buf.hasRemaining()) {

                // If not all bytes were written, move the unwritten bytes

                // to the beginning and set position just after the last

                // unwritten byte; also set limit to the capacity

                buffer.compact();

            else {

                // Set the position to 0 and the limit to capacity

                buffer.clear();

            }

        }

    

        // Close the file

        channel.close();

        

    catch (Exception e) {

    }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>