Eine Übersicht
Neues IO, das neue IO, das ab der Java1.4-Version eingeführt wurde, kann sein ersetzt Standard IO.
Stellt eine offene Verbindung mit der Datenquelle dar, die Daten dieser Art lesen und schreiben kann basieren auf Datenstücken.
Der Puffer zum Lesen und Schreiben von Daten des Kanals speichert die gelesenen Daten im Puffer Der Puffer wird in die Datei geschrieben.
Ermöglicht einem Thread die Überwachung mehrerer Kanäle.
Ein Dateioperationsobjekt, das sowohl Lesen, Schreiben als auch Direktzugriff unterstützt, äquivalent zu einem Array, das alle Bytes des enthält Datei .
IO ist in Bytes Oder Zeichen sind die Grundeinheit, und NIO verwendet Datenblöcke als Grundeinheit.
IO-Operationen blockieren Threads, NIO blockiert keine Threads.
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.
IO unterstützt keine Sperren, NIO unterstützt Sperren und die Funktion von Sperren besteht darin, den Zugriff auf Dateien zu steuern.
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.
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.
NIO stellt einen Puffer für jeden Basisdatentyp bereit, und die Manipulationsmethode ist dieselbe. Nehmen wir zur Klärung ByteBuffer als Beispiel.
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.
ByteBuffer byteBuffer=ByteBuffer.allocate();//通过分配指定长度的存储单位来创建缓冲区ByteBuffer byteBuffer=ByteBuffer.wrap(byte[] array);//基于数组创建缓冲区
put(Object data):将数据写入当前位置,同时将光标向前移动一个数据单位。
get():获取当前位置的数据,同时将光标向前移动一个数据单位。
flip():通过调整position与limit的值切换读写模式。
clear():并非清空缓冲区,而是调整position=0,limit=capacity,mark=-1。
array():将ByteBuffer中的数据复制的数组中。
在系统当中建立文件的映射,如果采用读写模式,那么对该映射的操作会反映到文件中。
由于将文件映射到内存中,资源消耗较大,只有在文件较大的情况下才将文件映射到内存中。
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!