SlideShare a Scribd company logo
Язык Java
java.nio
Введение
   Java.nio
    ◦ j2se 1.4 (Merlin)
 IO не обеспечивал достаточный уровень
  производительности при работе с
  большими объемами данных
 IO не предоставлял следующие
  возможности при работе с файлами
    ◦ Блокировка файлов
    ◦ Неблокирующий ввод/вывод
    ◦ Отображение в память
Buffers
 Буфер – контейнер для данных
  фиксированного размера
 Для каждого из примитивных типов
  существуют свои буферы
    ◦ CharBuffer, IntBuffer, DoubleBuffer,
      ShortBuffer, LongBuffer, FloatBuffer,
      ByteBuffer (MappedByteBuffer)
 Все классы буферов позволяют
  проводить конвертацию из байтовых
  массивов и обратно
 Буферы связаны с каналами
Атрибуты буфера
   Емкость (Capacity)
    ◦ Максимальное количество
      элементов, которое может содержать буфер.
      Задается на этапе создания буфера. Не
      изменяется.
   Предел (Limit)
    ◦ Количество доступных элементов в буфере.
   Позиция (Position)
    ◦ Позиция элемента, который может быть
      считан или записан.
   Метка (Mark)
    ◦ Сохраненная позиция, на которую можно
      вернуться
abstract class Buffer
   public final int capacity( )
   public final int position( )
   public final Buffer position (int newPosition)
   public final int limit( )
   public final Buffer limit (int newLimit)
   public final Buffer mark( )
   public final Buffer reset( )
   public final Buffer clear( )
   public final Buffer flip( )
   public final Buffer rewind( )
   public final int remaining( )
   public final boolean hasRemaining( )
   public abstract boolean isReadOnly( );
Доступ к содержимому буфера
   public abstract class ByteBuffer
    extends Buffer implements
    Comparable
    {
    public abstract byte get( );
    public abstract byte get (int index);
    public abstract ByteBuffer put (byte b);
    public abstract ByteBuffer put (int
    index, byte b);
    }
Работа с буфером
 buffer.put(0,
  (byte)‘H').put((byte)‘e').put((byte)’l’).put((byte)’l’).p
  ut((byte)’o’);
 Изменение буфера
    ◦ buffer.limit(buffer.position( )).position(0);
    ◦ buffer.flip( );
   Использование данных в буфере
    ◦ for (int i = 0; buffer.hasRemaining( ), i++) {
         byteArray [i] = buffer.get( );
      }
    ◦ int count = buffer.remaining( );
      for (int i = 0; i < count, i++) {
         byteArray [i] = buffer.get( );
      }
Работа с массивами данных
   public abstract class CharBuffer
    extends Buffer implements CharSequence,
    Comparable
    {
    ◦   public CharBuffer get (char [] dst)
    ◦   public CharBuffer get (char [] dst, int offset, int length)
    ◦   public final CharBuffer put (char[] src)
    ◦   public CharBuffer put (char [] src, int offset, int length)
    ◦   public CharBuffer put (CharBuffer src)
    ◦   public final CharBuffer put (String src)
    ◦   public CharBuffer put (String src, int start, int end)
   }
Пример использования
    CharBuffer
    cb=CharBuffer.allocate(20);
    cb.append("Hello, world");
    cb.put("!!!!");
    cb.flip();
    char[] c=new char[16];
    cb.get(c);
    System.out.println(Arrays.toString(c));
Создание буферов
   public abstract class CharBuffer
    extends Buffer implements
    CharSequence, Comparable{
    ◦ public static CharBuffer allocate (int capacity)
    ◦ public static CharBuffer wrap (char [] array)
    ◦ public static CharBuffer wrap (char [] array,
      int offset, int length)
    ◦ public final boolean hasArray( )
    ◦ public final char [] array( )
    ◦ public final int arrayOffset( )
   }
Создание копий буферов
   public abstract class CharBuffer
    extends Buffer implements
    CharSequence, Comparable{
    ◦ public abstract CharBuffer duplicate( );
    ◦ public abstract CharBuffer
      asReadOnlyBuffer( );
    ◦ public abstract CharBuffer slice( );
   }
ByteBuffer
   Лежит в основе всех буферов
   Преобразование из ByteBuffer
    ◦ public abstract class ByteBuffer
      extends Buffer implements Comparable{
         public abstract CharBuffer asCharBuffer( );
         public abstract ShortBuffer asShortBuffer( );
         public abstract IntBuffer asIntBuffer( );
         public abstract LongBuffer asLongBuffer( );
         public abstract FloatBuffer asFloatBuffer( );
         public abstract DoubleBuffer asDoubleBuffer( );
    ◦ }
   Перед преобразованием необходимо установить
    порядок байт
       public final ByteOrder order( )
       public final ByteBuffer order (ByteOrder bo)
Класс ByteOrder
 Служит для определения порядка
  следования байт
 public final class ByteOrder{
    ◦ public static final ByteOrder BIG_ENDIAN
    ◦ public static final ByteOrder
      LITTLE_ENDIAN
    ◦ public static ByteOrder nativeOrder( )
    ◦ public String toString( )
   }
Методы для представления в
виде разного типа данных
   public abstract class ByteBuffer extends Buffer
    implements Comparable{
    ◦   public abstract char getChar( );
    ◦   public abstract char getChar (int index);
    ◦   public abstract short getShort( );
    ◦   public abstract short getShort (int index);
    ◦   public abstract int getInt( );
    ◦   public abstract int getInt (int index);
    ◦   public abstract long getLong( );
    ◦   public abstract long getLong (int index);
    ◦   public abstract float getFloat( );
    ◦   public abstract float getFloat (int index);
    ◦   public abstract double getDouble( );
Методы для представления в
виде разного типа данных
    ◦   public abstract double getDouble (int index);
    ◦   public abstract ByteBuffer putChar (char value);
    ◦   public abstract ByteBuffer putChar (int index, char value);
    ◦   public abstract ByteBuffer putShort (short value);
    ◦   public abstract ByteBuffer putShort (int index, short value);
    ◦   public abstract ByteBuffer putInt (int value);
    ◦   public abstract ByteBuffer putInt (int index, int value);
    ◦   public abstract ByteBuffer putLong (long value);
    ◦   public abstract ByteBuffer putLong (int index, long value);
    ◦   public abstract ByteBuffer putFloat (float value);
    ◦   public abstract ByteBuffer putFloat (int index, float value);
    ◦   public abstract ByteBuffer putDouble (double value);
    ◦   public abstract ByteBuffer putDouble (int index, double
        value);
   }
Язык Java
java.nio.channels

КАНАЛЫ
Интерфейс channel
public interface Channel
{
    ◦ public boolean isOpen( );
    ◦ public void close( ) throws IOException;
   }
Открытие канала
   SocketChannel
    ◦ SocketChannel sc = SocketChannel.open( );
    ◦ sc.connect (new InetSocketAddress ("somehost",
      someport));
   ServerSocketChannel
    ◦ ServerSocketChannel ssc =
      ServerSocketChannel.open( );
    ◦ ssc.socket( ).bind (new InetSocketAddress
      (somelocalport));
   DatagramChannel
    ◦ DatagramChannel dc = DatagramChannel.open( );
   FileChannel
    ◦ RandomAccessFile raf = new RandomAccessFile
      ("somefile", "r");
    ◦ FileChannel fc = raf.getChannel( );
Связь каналов с потоками
   FileInputStream
    ◦ ByteChannel – двунаправленный
    ◦ Позволяет производить только чтение
   FileOutputStream
    ◦ ByteChannel – двунаправленный
    ◦ Позволяет проводить только чтение
   RandomAccessFile
    ◦ ByteChannel – двунаправленный
    ◦ Позволяет проводить чтение и запись
Одновременная работа с
несколькими буферами
   ScatteringByteChannel
    ◦ public interface ScatteringByteChannel
      extends ReadableByteChannel{
      public long read (ByteBuffer [] dsts) throws
       IOException;
      public long read (ByteBuffer [] dsts, int offset,
       int length) throws IOException;
    ◦}
Одновременная работа с
несколькими буферами
   GatheringByteChannel
    ◦ public interface GatheringByteChannel
      extends WritableByteChannel{
      public long write(ByteBuffer[] srcs) throws
       IOException;
      public long write(ByteBuffer[] srcs, int offset, int
       length) throws IOException;
    ◦}
Пример работы с FileChannel
   FileOutputStream fo=null;
       FileChannel inChannel=null;
       FileChannel outChannel=null;
       FileInputStream fi=null;
       try{
          try{
             fi=new FileInputStream(args[0]);
             inChannel=fi.getChannel();
             fo=new FileOutputStream(args[1]);
             outChannel=fo.getChannel();
             ByteBuffer
    bb=ByteBuffer.allocate(1024);
Пример работы с FileChannel
(продолжение)
    int i=0;
     while((i=inChannel.read(bb))!=0) {
            bb.flip();
            outChannel.write(bb);
    }
    inChannel.position(0);
    inChannel.read(bb);
    bb.flip();
    ByteBuffer bb3=ByteBuffer.allocate(10);
    bb3.put(0,(byte)'-').put((byte)'-').put((byte)'-
    ').put((byte)'-').put((byte)'-').put((byte)'-
    ').put((byte)'-').flip();
    ByteBuffer bb1=bb.duplicate();
    ByteBuffer bb2=bb.duplicate();
    outChannel.write(new
    ByteBuffer[]{bb3,bb,bb1,bb2});
Пример работы с FileChannel
(продолжение)
     }finally{
          if(inChannel!=null)
                   inChannel.close();
          if(outChannel!=null)
                   outChannel.close();
          if(fo!=null)
                   fo.close();
          if(fi!=null)
                   fi.close();
       }
    }catch(Exception e){
             System.out.println(e);
    }
FileChannel

ОТОБРАЖЕНИЕ ФАЙЛА В
ПАМЯТЬ
Методы для отображения файла
в память
 public abstract MappedByteBuffer
  map(MapMode mode, long
  position, long size)
 public static class MapMode
    ◦ public static final MapMode READ_ONLY
    ◦ public static final MapMode
      READ_WRITE
    ◦ public static final MapMode PRIVATE
Пример использования
MappedByteBuffer
(MapMode.READ_WRITE)
   RandomAccessFile fi=null;
    FileChannel fc=null;
    MappedByteBuffer mbb=null;
    try{
        try{
           fi=new
    RandomAccessFile(args[0],"rw");
           fc=fi.getChannel();
         mbb=fc.map(FileChannel.MapMode.REA
    D_WRITE, 2, fc.size());
          mbb.order(ByteOrder.LITTLE_ENDIAN);
          CharBuffer cb=mbb.asCharBuffer();
          cb.position(0);
          cb.put('h').put('e').put('l').put('l').put('o');
Пример использования
MappedByteBuffer
    }finally{
         if(fc!=null)
                fc.close();
         if(fi!=null)
                 fi.close();
      }
    }catch(Exception e){
        System.out.println(e);
    }
Пример использования
MappedByteBuffer
(MapMode.PRIVATE)
   RandomAccessFile fi=null;
    FileChannel fc=null;
    MappedByteBuffer mbb=null;
    try{
       try{
         fi=new RandomAccessFile(args[0],"rw");
         fc=fi.getChannel();
    mbb=fc.map(FileChannel.MapMode.PRIVAT
    E, 2, fc.size());
          mbb.order(ByteOrder.LITTLE_ENDIAN);
          CharBuffer cb=mbb.asCharBuffer();
          cb.position(0);
          cb.put('1').put('1').put('1').put('1').put('1');
Пример использования
MappedByteBuffer
(MapMode.PRIVATE)
             cb.position(0);
    System.out.println(cb.toString());
            }finally{
                if(fc!=null)
                    fc.close();
                if(fi!=null)
                    fi.close();
            }
         }catch(Exception e)
         {
            System.out.println(e);
         }
Вопросы
e-mail: a.bovanenko@gmail.com

КОНЕЦ

More Related Content

What's hot (20)

PDF
RDSDataSource: Promises
RAMBLER&Co
 
PDF
Семинар 10. Параллельное программирование на MPI (часть 3)
Mikhail Kurnosov
 
PPT
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Vadim Kruchkov
 
PDF
Linux (pipes)
Mihail Nesterov
 
PPTX
file handling in c++
Maxim Shaptala
 
PPT
Dynamic Language Runtime
SQALab
 
PDF
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
IT Event
 
PPTX
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Ontico
 
PDF
Reform: путь к лучшему ORM
Badoo Development
 
PDF
Python и Cython
Alexander Shigin
 
PDF
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Mail.ru Group
 
PDF
Optimization of Automata-Based Programs by means of Requirements Transformati...
Iosif Itkin
 
PPT
Hl2008 Hp Server Design 169
Media Gorod
 
PDF
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Ontico
 
PDF
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
Ontico
 
PDF
Леонид Васильев "Python в инфраструктуре поиска"
Yandex
 
PPTX
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
Python Meetup
 
PDF
Семинар 8. Параллельное программирование на MPI (часть 1)
Mikhail Kurnosov
 
PPT
Web осень 2012 лекция 3
Technopark
 
RDSDataSource: Promises
RAMBLER&Co
 
Семинар 10. Параллельное программирование на MPI (часть 3)
Mikhail Kurnosov
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Vadim Kruchkov
 
Linux (pipes)
Mihail Nesterov
 
file handling in c++
Maxim Shaptala
 
Dynamic Language Runtime
SQALab
 
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
IT Event
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Ontico
 
Reform: путь к лучшему ORM
Badoo Development
 
Python и Cython
Alexander Shigin
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Mail.ru Group
 
Optimization of Automata-Based Programs by means of Requirements Transformati...
Iosif Itkin
 
Hl2008 Hp Server Design 169
Media Gorod
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Ontico
 
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
Ontico
 
Леонид Васильев "Python в инфраструктуре поиска"
Yandex
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
Python Meetup
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Mikhail Kurnosov
 
Web осень 2012 лекция 3
Technopark
 

Viewers also liked (9)

ODP
Pointers
Alexey Bovanenko
 
PDF
PHP introduction
Alexey Bovanenko
 
PDF
Python. Строки
Alexey Bovanenko
 
ODP
Исключительные ситуации
Alexey Bovanenko
 
PDF
Python. Введение
Alexey Bovanenko
 
PDF
Python sqlite3
Alexey Bovanenko
 
PDF
File. Java
Alexey Bovanenko
 
PDF
Python. re
Alexey Bovanenko
 
PDF
python dict
Alexey Bovanenko
 
PHP introduction
Alexey Bovanenko
 
Python. Строки
Alexey Bovanenko
 
Исключительные ситуации
Alexey Bovanenko
 
Python. Введение
Alexey Bovanenko
 
Python sqlite3
Alexey Bovanenko
 
File. Java
Alexey Bovanenko
 
Python. re
Alexey Bovanenko
 
python dict
Alexey Bovanenko
 
Ad

Similar to Nio java (20)

PDF
Lec 5
Alexander Rusin
 
PPT
Лекция 5
itc73
 
PDF
Консольные приложения на Go
Andrey Smirnov
 
PPTX
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
Fedor Lavrentyev
 
PDF
JPoint 2016 - Etudes of DIY Java profiler
Anton Arhipov
 
PDF
Продолжаем говорить о микрооптимизациях .NET-приложений
Andrey Akinshin
 
PPTX
Everything you wanted to know about writing async, high-concurrency HTTP apps...
JavaDayUA
 
PPTX
Step 6
DmitryTrushkin
 
PDF
Иван Пузыревский — Введение в асинхронное программирование
Yandex
 
PPT
5. java lecture io
MERA_school
 
PPTX
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Sergey Platonov
 
ODP
Программирование Linux
Anthony Shoumikhin
 
ODP
Программирование Linux
Anthony Shoumikhin
 
ODP
Программирование Linux
Anthony Shoumikhin
 
PDF
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Yandex
 
PPTX
Asynchrony and coroutines
corehard_by
 
PPTX
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
PPT
Root Conf2009 Fin
Liudmila Li
 
PPT
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf Conference
 
PDF
ekbpy'2012 - Михаил Коробов - Python 3
it-people
 
Лекция 5
itc73
 
Консольные приложения на Go
Andrey Smirnov
 
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
Fedor Lavrentyev
 
JPoint 2016 - Etudes of DIY Java profiler
Anton Arhipov
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Andrey Akinshin
 
Everything you wanted to know about writing async, high-concurrency HTTP apps...
JavaDayUA
 
Иван Пузыревский — Введение в асинхронное программирование
Yandex
 
5. java lecture io
MERA_school
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Sergey Platonov
 
Программирование Linux
Anthony Shoumikhin
 
Программирование Linux
Anthony Shoumikhin
 
Программирование Linux
Anthony Shoumikhin
 
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Yandex
 
Asynchrony and coroutines
corehard_by
 
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
Root Conf2009 Fin
Liudmila Li
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf Conference
 
ekbpy'2012 - Михаил Коробов - Python 3
it-people
 
Ad

More from Alexey Bovanenko (20)

PPT
Конвертация строковых данных в числовые
Alexey Bovanenko
 
ODP
Assert c
Alexey Bovanenko
 
PPT
Обработка символов в языке C
Alexey Bovanenko
 
ODP
System c
Alexey Bovanenko
 
PPTX
Javascript functions
Alexey Bovanenko
 
PPTX
Javascript String object
Alexey Bovanenko
 
ODP
ZIP, GZIP Streams in java
Alexey Bovanenko
 
PDF
Конструктор копирования
Alexey Bovanenko
 
PDF
Tempale Intro
Alexey Bovanenko
 
PDF
transaction. php
Alexey Bovanenko
 
PDF
cookie. support by php
Alexey Bovanenko
 
PDF
php sessions
Alexey Bovanenko
 
ODP
Java IO. Streams
Alexey Bovanenko
 
ODP
Regular Expressions
Alexey Bovanenko
 
ODP
Classes: Number, String, StringBuffer, StringBuilder
Alexey Bovanenko
 
ODP
Объект Logger
Alexey Bovanenko
 
ODP
Drag And Drop Windows Forms
Alexey Bovanenko
 
PDF
enum. Java.
Alexey Bovanenko
 
PDF
Files. Php.
Alexey Bovanenko
 
PDF
Apache
Alexey Bovanenko
 
Конвертация строковых данных в числовые
Alexey Bovanenko
 
Обработка символов в языке C
Alexey Bovanenko
 
Javascript functions
Alexey Bovanenko
 
Javascript String object
Alexey Bovanenko
 
ZIP, GZIP Streams in java
Alexey Bovanenko
 
Конструктор копирования
Alexey Bovanenko
 
Tempale Intro
Alexey Bovanenko
 
transaction. php
Alexey Bovanenko
 
cookie. support by php
Alexey Bovanenko
 
php sessions
Alexey Bovanenko
 
Java IO. Streams
Alexey Bovanenko
 
Regular Expressions
Alexey Bovanenko
 
Classes: Number, String, StringBuffer, StringBuilder
Alexey Bovanenko
 
Объект Logger
Alexey Bovanenko
 
Drag And Drop Windows Forms
Alexey Bovanenko
 
enum. Java.
Alexey Bovanenko
 
Files. Php.
Alexey Bovanenko
 

Nio java

  • 2. Введение  Java.nio ◦ j2se 1.4 (Merlin)  IO не обеспечивал достаточный уровень производительности при работе с большими объемами данных  IO не предоставлял следующие возможности при работе с файлами ◦ Блокировка файлов ◦ Неблокирующий ввод/вывод ◦ Отображение в память
  • 3. Buffers  Буфер – контейнер для данных фиксированного размера  Для каждого из примитивных типов существуют свои буферы ◦ CharBuffer, IntBuffer, DoubleBuffer, ShortBuffer, LongBuffer, FloatBuffer, ByteBuffer (MappedByteBuffer)  Все классы буферов позволяют проводить конвертацию из байтовых массивов и обратно  Буферы связаны с каналами
  • 4. Атрибуты буфера  Емкость (Capacity) ◦ Максимальное количество элементов, которое может содержать буфер. Задается на этапе создания буфера. Не изменяется.  Предел (Limit) ◦ Количество доступных элементов в буфере.  Позиция (Position) ◦ Позиция элемента, который может быть считан или записан.  Метка (Mark) ◦ Сохраненная позиция, на которую можно вернуться
  • 5. abstract class Buffer  public final int capacity( )  public final int position( )  public final Buffer position (int newPosition)  public final int limit( )  public final Buffer limit (int newLimit)  public final Buffer mark( )  public final Buffer reset( )  public final Buffer clear( )  public final Buffer flip( )  public final Buffer rewind( )  public final int remaining( )  public final boolean hasRemaining( )  public abstract boolean isReadOnly( );
  • 6. Доступ к содержимому буфера  public abstract class ByteBuffer extends Buffer implements Comparable { public abstract byte get( ); public abstract byte get (int index); public abstract ByteBuffer put (byte b); public abstract ByteBuffer put (int index, byte b); }
  • 7. Работа с буфером  buffer.put(0, (byte)‘H').put((byte)‘e').put((byte)’l’).put((byte)’l’).p ut((byte)’o’);  Изменение буфера ◦ buffer.limit(buffer.position( )).position(0); ◦ buffer.flip( );  Использование данных в буфере ◦ for (int i = 0; buffer.hasRemaining( ), i++) { byteArray [i] = buffer.get( ); } ◦ int count = buffer.remaining( ); for (int i = 0; i < count, i++) { byteArray [i] = buffer.get( ); }
  • 8. Работа с массивами данных  public abstract class CharBuffer extends Buffer implements CharSequence, Comparable { ◦ public CharBuffer get (char [] dst) ◦ public CharBuffer get (char [] dst, int offset, int length) ◦ public final CharBuffer put (char[] src) ◦ public CharBuffer put (char [] src, int offset, int length) ◦ public CharBuffer put (CharBuffer src) ◦ public final CharBuffer put (String src) ◦ public CharBuffer put (String src, int start, int end)  }
  • 9. Пример использования  CharBuffer cb=CharBuffer.allocate(20); cb.append("Hello, world"); cb.put("!!!!"); cb.flip(); char[] c=new char[16]; cb.get(c); System.out.println(Arrays.toString(c));
  • 10. Создание буферов  public abstract class CharBuffer extends Buffer implements CharSequence, Comparable{ ◦ public static CharBuffer allocate (int capacity) ◦ public static CharBuffer wrap (char [] array) ◦ public static CharBuffer wrap (char [] array, int offset, int length) ◦ public final boolean hasArray( ) ◦ public final char [] array( ) ◦ public final int arrayOffset( )  }
  • 11. Создание копий буферов  public abstract class CharBuffer extends Buffer implements CharSequence, Comparable{ ◦ public abstract CharBuffer duplicate( ); ◦ public abstract CharBuffer asReadOnlyBuffer( ); ◦ public abstract CharBuffer slice( );  }
  • 12. ByteBuffer  Лежит в основе всех буферов  Преобразование из ByteBuffer ◦ public abstract class ByteBuffer extends Buffer implements Comparable{  public abstract CharBuffer asCharBuffer( );  public abstract ShortBuffer asShortBuffer( );  public abstract IntBuffer asIntBuffer( );  public abstract LongBuffer asLongBuffer( );  public abstract FloatBuffer asFloatBuffer( );  public abstract DoubleBuffer asDoubleBuffer( ); ◦ }  Перед преобразованием необходимо установить порядок байт  public final ByteOrder order( )  public final ByteBuffer order (ByteOrder bo)
  • 13. Класс ByteOrder  Служит для определения порядка следования байт  public final class ByteOrder{ ◦ public static final ByteOrder BIG_ENDIAN ◦ public static final ByteOrder LITTLE_ENDIAN ◦ public static ByteOrder nativeOrder( ) ◦ public String toString( )  }
  • 14. Методы для представления в виде разного типа данных  public abstract class ByteBuffer extends Buffer implements Comparable{ ◦ public abstract char getChar( ); ◦ public abstract char getChar (int index); ◦ public abstract short getShort( ); ◦ public abstract short getShort (int index); ◦ public abstract int getInt( ); ◦ public abstract int getInt (int index); ◦ public abstract long getLong( ); ◦ public abstract long getLong (int index); ◦ public abstract float getFloat( ); ◦ public abstract float getFloat (int index); ◦ public abstract double getDouble( );
  • 15. Методы для представления в виде разного типа данных ◦ public abstract double getDouble (int index); ◦ public abstract ByteBuffer putChar (char value); ◦ public abstract ByteBuffer putChar (int index, char value); ◦ public abstract ByteBuffer putShort (short value); ◦ public abstract ByteBuffer putShort (int index, short value); ◦ public abstract ByteBuffer putInt (int value); ◦ public abstract ByteBuffer putInt (int index, int value); ◦ public abstract ByteBuffer putLong (long value); ◦ public abstract ByteBuffer putLong (int index, long value); ◦ public abstract ByteBuffer putFloat (float value); ◦ public abstract ByteBuffer putFloat (int index, float value); ◦ public abstract ByteBuffer putDouble (double value); ◦ public abstract ByteBuffer putDouble (int index, double value);  }
  • 17. Интерфейс channel public interface Channel { ◦ public boolean isOpen( ); ◦ public void close( ) throws IOException;  }
  • 18. Открытие канала  SocketChannel ◦ SocketChannel sc = SocketChannel.open( ); ◦ sc.connect (new InetSocketAddress ("somehost", someport));  ServerSocketChannel ◦ ServerSocketChannel ssc = ServerSocketChannel.open( ); ◦ ssc.socket( ).bind (new InetSocketAddress (somelocalport));  DatagramChannel ◦ DatagramChannel dc = DatagramChannel.open( );  FileChannel ◦ RandomAccessFile raf = new RandomAccessFile ("somefile", "r"); ◦ FileChannel fc = raf.getChannel( );
  • 19. Связь каналов с потоками  FileInputStream ◦ ByteChannel – двунаправленный ◦ Позволяет производить только чтение  FileOutputStream ◦ ByteChannel – двунаправленный ◦ Позволяет проводить только чтение  RandomAccessFile ◦ ByteChannel – двунаправленный ◦ Позволяет проводить чтение и запись
  • 20. Одновременная работа с несколькими буферами  ScatteringByteChannel ◦ public interface ScatteringByteChannel extends ReadableByteChannel{  public long read (ByteBuffer [] dsts) throws IOException;  public long read (ByteBuffer [] dsts, int offset, int length) throws IOException; ◦}
  • 21. Одновременная работа с несколькими буферами  GatheringByteChannel ◦ public interface GatheringByteChannel extends WritableByteChannel{  public long write(ByteBuffer[] srcs) throws IOException;  public long write(ByteBuffer[] srcs, int offset, int length) throws IOException; ◦}
  • 22. Пример работы с FileChannel  FileOutputStream fo=null;  FileChannel inChannel=null;  FileChannel outChannel=null;  FileInputStream fi=null;  try{  try{  fi=new FileInputStream(args[0]);  inChannel=fi.getChannel();  fo=new FileOutputStream(args[1]);  outChannel=fo.getChannel();  ByteBuffer bb=ByteBuffer.allocate(1024);
  • 23. Пример работы с FileChannel (продолжение)  int i=0; while((i=inChannel.read(bb))!=0) { bb.flip(); outChannel.write(bb); } inChannel.position(0); inChannel.read(bb); bb.flip(); ByteBuffer bb3=ByteBuffer.allocate(10); bb3.put(0,(byte)'-').put((byte)'-').put((byte)'- ').put((byte)'-').put((byte)'-').put((byte)'- ').put((byte)'-').flip(); ByteBuffer bb1=bb.duplicate(); ByteBuffer bb2=bb.duplicate(); outChannel.write(new ByteBuffer[]{bb3,bb,bb1,bb2});
  • 24. Пример работы с FileChannel (продолжение)  }finally{ if(inChannel!=null) inChannel.close(); if(outChannel!=null) outChannel.close(); if(fo!=null) fo.close(); if(fi!=null) fi.close(); } }catch(Exception e){ System.out.println(e); }
  • 26. Методы для отображения файла в память  public abstract MappedByteBuffer map(MapMode mode, long position, long size)  public static class MapMode ◦ public static final MapMode READ_ONLY ◦ public static final MapMode READ_WRITE ◦ public static final MapMode PRIVATE
  • 27. Пример использования MappedByteBuffer (MapMode.READ_WRITE)  RandomAccessFile fi=null; FileChannel fc=null; MappedByteBuffer mbb=null; try{ try{ fi=new RandomAccessFile(args[0],"rw"); fc=fi.getChannel(); mbb=fc.map(FileChannel.MapMode.REA D_WRITE, 2, fc.size()); mbb.order(ByteOrder.LITTLE_ENDIAN); CharBuffer cb=mbb.asCharBuffer(); cb.position(0); cb.put('h').put('e').put('l').put('l').put('o');
  • 28. Пример использования MappedByteBuffer  }finally{ if(fc!=null) fc.close(); if(fi!=null) fi.close(); } }catch(Exception e){ System.out.println(e); }
  • 29. Пример использования MappedByteBuffer (MapMode.PRIVATE)  RandomAccessFile fi=null; FileChannel fc=null; MappedByteBuffer mbb=null; try{ try{ fi=new RandomAccessFile(args[0],"rw"); fc=fi.getChannel(); mbb=fc.map(FileChannel.MapMode.PRIVAT E, 2, fc.size()); mbb.order(ByteOrder.LITTLE_ENDIAN); CharBuffer cb=mbb.asCharBuffer(); cb.position(0); cb.put('1').put('1').put('1').put('1').put('1');
  • 30. Пример использования MappedByteBuffer (MapMode.PRIVATE)  cb.position(0); System.out.println(cb.toString()); }finally{ if(fc!=null) fc.close(); if(fi!=null) fi.close(); } }catch(Exception e) { System.out.println(e); }