Heim  >  Artikel  >  Java  >  Überblick über NIO und Vergleich zwischen NIO und IO

Überblick über NIO und Vergleich zwischen NIO und IO

零下一度
零下一度Original
2017-06-27 09:47:491611Durchsuche

Eine Übersicht

1.NIO

Neues IO, das neue IO, das ab der Java1.4-Version eingeführt wurde, kann sein ersetzt Standard IO.

2.Kanal

Stellt eine offene Verbindung mit der Datenquelle dar, die Daten dieser Art lesen und schreiben kann basieren auf Datenstücken.

3.Puffer

Der Puffer zum Lesen und Schreiben von Daten des Kanals speichert die gelesenen Daten im Puffer Der Puffer wird in die Datei geschrieben.

4.Selektor

Ermöglicht einem Thread die Überwachung mehrerer Kanäle.

5.RandomAccessFile

Ein Dateioperationsobjekt, das sowohl Lesen, Schreiben als auch Direktzugriff unterstützt, äquivalent zu einem Array, das alle Bytes des enthält Datei .

Vergleich zwischen NIO und IO

1. Grunddateneinheit

IO ist in Bytes Oder Zeichen sind die Grundeinheit, und NIO verwendet Datenblöcke als Grundeinheit.

2. Blockieren

IO-Operationen blockieren Threads, NIO blockiert keine Threads.

3. Index

Es gibt keinen Index im Stream der E/A-Operation und die Operationsposition kann nicht angegeben werden. Es gibt Indizes in NIO-Daten, und der Vorgangsort kann angegeben werden.

4. Sperren

IO unterstützt keine Sperren, NIO unterstützt Sperren und die Funktion von Sperren besteht darin, den Zugriff auf Dateien zu steuern.

Drei Kanäle

1. Objekterstellung:

Erstellen Sie Objekte basierend auf Eingabe und Ausgabe Streams:

InputStream is=new FileInputStream(String name);
FileChannel channel=is.getChannel();

Erstellen Sie ein Objekt basierend auf dem RandomAccessFile-Objekt

RandonAccessFile file=new RandomAccessFile(String name ,"rw");
FileChannel channel=file.getChannel();

2. Objekte, die auf Basis des Eingabestreams erstellt wurden, können nur Eingaben sein, Objekte, die auf Basis des Ausgabestreams erstellt wurden, können nur ausgegeben werden, und Objekte, die auf Basis von RandomAccessFile erstellt wurden, können sowohl Eingabe als auch Ausgabe sein.

3. Die Daten im Kanal haben einen Index und die Lese- und Schreiborte können angegeben werden.

4. Allgemeine Methoden

  • truncate(long size): Den Inhalt der angegebenen Bytelänge aus dem abfangen Anfang, Löschen Sie den Rest. Wenn die Länge größer als die aktuelle Größe der Datei ist, schlägt dieser Vorgang fehl.

Vier Puffer

NIO stellt einen Puffer für jeden Basisdatentyp bereit, und die Manipulationsmethode ist dieselbe. Nehmen wir zur Klärung ByteBuffer als Beispiel.

1. Drei wichtige Attribute

  • Position: Die aktuelle Cursorposition, die zur Bestimmung des Startpunkts des Lesens verwendet wird und Schreiben.

  • Grenze: Obergrenze, die zur Bestimmung des Lese- und Schreibbereichs ohne Index verwendet wird.

  • Kapazität: Kapazität, mit der die maximale Datenmenge bestimmt wird, die gespeichert werden kann.

2. Objekterstellung

ByteBuffer byteBuffer=ByteBuffer.allocate();//通过分配指定长度的存储单位来创建缓冲区ByteBuffer byteBuffer=ByteBuffer.wrap(byte[] array);//基于数组创建缓冲区

3.常用方法:

  • put(Object data):将数据写入当前位置,同时将光标向前移动一个数据单位。

  • get():获取当前位置的数据,同时将光标向前移动一个数据单位。

  • flip():通过调整position与limit的值切换读写模式。

  • clear():并非清空缓冲区,而是调整position=0,limit=capacity,mark=-1。

  • array():将ByteBuffer中的数据复制的数组中。

五 MappedByteBuffer

在系统当中建立文件的映射,如果采用读写模式,那么对该映射的操作会反映到文件中。

由于将文件映射到内存中,资源消耗较大,只有在文件较大的情况下才将文件映射到内存中。

获取对象

MappedByteBuffer mbb=channel.map(MapMode mode,long offset,long size);

有3中映射方式:

  • READ_ONLY:映射内容只允许读,不允许修改。

  • READ_WRITE:映射内容既允许读,也允许改,修改内容会反映到文件中。

  • PRIVATE:在本地创建一个副本,读写操作都是针对副本,写不会反映到原始文件中。

Das obige ist der detaillierte Inhalt vonÜberblick über NIO und Vergleich zwischen NIO und IO. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn