Язык Javajava.nio
Введение   Java.nio    ◦ j2se 1.4 (Merlin) IO не обеспечивал достаточный уровень  производительности при работе с  больш...
Buffers Буфер – контейнер для данных  фиксированного размера Для каждого из примитивных типов  существуют свои буферы   ...
Атрибуты буфера   Емкость (Capacity)    ◦ Максимальное количество      элементов, которое может содержать буфер.      Зад...
abstract class Buffer   public final int capacity( )   public final int position( )   public final Buffer position (int...
Доступ к содержимому буфера   public abstract class ByteBuffer    extends Buffer implements    Comparable    {    public ...
Работа с буфером buffer.put(0,  (byte)‘H).put((byte)‘e).put((byte)’l’).put((byte)’l’).p  ut((byte)’o’); Изменение буфера...
Работа с массивами данных   public abstract class CharBuffer    extends Buffer implements CharSequence,    Comparable    ...
Пример использования    CharBuffer    cb=CharBuffer.allocate(20);    cb.append("Hello, world");    cb.put("!!!!");    cb....
Создание буферов   public abstract class CharBuffer    extends Buffer implements    CharSequence, Comparable{    ◦ public...
Создание копий буферов   public abstract class CharBuffer    extends Buffer implements    CharSequence, Comparable{    ◦ ...
ByteBuffer   Лежит в основе всех буферов   Преобразование из ByteBuffer    ◦ public abstract class ByteBuffer      exten...
Класс ByteOrder Служит для определения порядка  следования байт public final class ByteOrder{    ◦ public static final B...
Методы для представления ввиде разного типа данных   public abstract class ByteBuffer extends Buffer    implements Compar...
Методы для представления ввиде разного типа данных    ◦   public abstract double getDouble (int index);    ◦   public abst...
Язык Javajava.nio.channelsКАНАЛЫ
Интерфейс channelpublic interface Channel{    ◦ public boolean isOpen( );    ◦ public void close( ) throws IOException;...
Открытие канала   SocketChannel    ◦ SocketChannel sc = SocketChannel.open( );    ◦ sc.connect (new InetSocketAddress ("s...
Связь каналов с потоками   FileInputStream    ◦ ByteChannel – двунаправленный    ◦ Позволяет производить только чтение  ...
Одновременная работа снесколькими буферами   ScatteringByteChannel    ◦ public interface ScatteringByteChannel      exten...
Одновременная работа снесколькими буферами   GatheringByteChannel    ◦ public interface GatheringByteChannel      extends...
Пример работы с FileChannel   FileOutputStream fo=null;       FileChannel inChannel=null;       FileChannel outChannel=...
Пример работы с FileChannel(продолжение)    int i=0;     while((i=inChannel.read(bb))!=0) {            bb.flip();        ...
Пример работы с FileChannel(продолжение)     }finally{          if(inChannel!=null)                   inChannel.close(); ...
FileChannelОТОБРАЖЕНИЕ ФАЙЛА ВПАМЯТЬ
Методы для отображения файлав память public abstract MappedByteBuffer  map(MapMode mode, long  position, long size) publ...
Пример использованияMappedByteBuffer(MapMode.READ_WRITE)   RandomAccessFile fi=null;    FileChannel fc=null;    MappedByt...
Пример использованияMappedByteBuffer    }finally{         if(fc!=null)                fc.close();         if(fi!=null)   ...
Пример использованияMappedByteBuffer(MapMode.PRIVATE)   RandomAccessFile fi=null;    FileChannel fc=null;    MappedByteBu...
Пример использованияMappedByteBuffer(MapMode.PRIVATE)             cb.position(0);    System.out.println(cb.toString());  ...
Вопросыe-mail: a.bovanenko@gmail.comКОНЕЦ
Upcoming SlideShare
Loading in …5
×

Nio java

1,214 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,214
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
13
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Nio java

  1. 1. Язык Javajava.nio
  2. 2. Введение Java.nio ◦ j2se 1.4 (Merlin) IO не обеспечивал достаточный уровень производительности при работе с большими объемами данных IO не предоставлял следующие возможности при работе с файлами ◦ Блокировка файлов ◦ Неблокирующий ввод/вывод ◦ Отображение в память
  3. 3. Buffers Буфер – контейнер для данных фиксированного размера Для каждого из примитивных типов существуют свои буферы ◦ CharBuffer, IntBuffer, DoubleBuffer, ShortBuffer, LongBuffer, FloatBuffer, ByteBuffer (MappedByteBuffer) Все классы буферов позволяют проводить конвертацию из байтовых массивов и обратно Буферы связаны с каналами
  4. 4. Атрибуты буфера Емкость (Capacity) ◦ Максимальное количество элементов, которое может содержать буфер. Задается на этапе создания буфера. Не изменяется. Предел (Limit) ◦ Количество доступных элементов в буфере. Позиция (Position) ◦ Позиция элемента, который может быть считан или записан. Метка (Mark) ◦ Сохраненная позиция, на которую можно вернуться
  5. 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. 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. 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. 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. 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. 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. 11. Создание копий буферов public abstract class CharBuffer extends Buffer implements CharSequence, Comparable{ ◦ public abstract CharBuffer duplicate( ); ◦ public abstract CharBuffer asReadOnlyBuffer( ); ◦ public abstract CharBuffer slice( ); }
  12. 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. 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. 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. 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); }
  16. 16. Язык Javajava.nio.channelsКАНАЛЫ
  17. 17. Интерфейс channelpublic interface Channel{ ◦ public boolean isOpen( ); ◦ public void close( ) throws IOException; }
  18. 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. 19. Связь каналов с потоками FileInputStream ◦ ByteChannel – двунаправленный ◦ Позволяет производить только чтение FileOutputStream ◦ ByteChannel – двунаправленный ◦ Позволяет проводить только чтение RandomAccessFile ◦ ByteChannel – двунаправленный ◦ Позволяет проводить чтение и запись
  20. 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. 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. 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. 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. 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); }
  25. 25. FileChannelОТОБРАЖЕНИЕ ФАЙЛА ВПАМЯТЬ
  26. 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. 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. 28. Пример использованияMappedByteBuffer }finally{ if(fc!=null) fc.close(); if(fi!=null) fi.close(); } }catch(Exception e){ System.out.println(e); }
  29. 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. 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); }
  31. 31. Вопросыe-mail: a.bovanenko@gmail.comКОНЕЦ

×