Maison  >  Article  >  Java  >  Présentation de NIO et comparaison entre NIO et IO

Présentation de NIO et comparaison entre NIO et IO

零下一度
零下一度original
2017-06-27 09:47:491611parcourir

Un aperçu

1.NIO

La nouvelle IO, la nouvelle IO introduite à partir de la version java1.4, peut être remplacé la norme IO.

2.Channel

Représente une connexion ouverte avec la source de données, qui peut lire et écrire des données. Ce type d'opérations de lecture et d'écriture. sont basés sur des données.

3.Buffer

Le tampon permettant au canal de lire et d'écrire des données. Le canal stocke les données lues dans le tampon et stocke les données. dans le tampon. Les données sont écrites dans le fichier.

4.Sélecteur

Permet à un thread de surveiller plusieurs canaux.

5.RandomAccessFile

Un objet d'opération de fichier qui prend en charge à la fois la lecture, l'écriture et l'accès aléatoire, équivalent à un tableau contenant tous les octets du déposer .

Comparaison entre NIO et IO

1. Unité de données de base

IO est en octets Ou les caractères sont l'unité de base et NIO utilise des blocs de données comme unité de base.

2. Blocage

Les opérations IO bloquent les threads, NIO ne bloque pas les threads.

3. Index

Il n'y a pas d'index dans le flux d'opération IO et la position d'opération ne peut pas être spécifiée. Il existe des index dans les données NIO et l'emplacement de l'opération peut être spécifié.

4. Verrouillage

IO ne prend pas en charge les verrous, NIO prend en charge les verrous et la fonction des verrous est de contrôler l'accès aux fichiers.

Trois canaux

1. Création d'objets :

Créer des objets basés sur l'entrée et la sortie streams :

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

Créer un objet basé sur l'objet RandomAccessFile

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

2. Les objets créés sur la base du flux d'entrée ne peuvent être que des entrées, les objets créés sur la base du flux de sortie ne peuvent être que des sorties et les objets créés sur la base de RandomAccessFile peuvent être à la fois des entrées et des sorties.

3. Les données du canal ont un index et les emplacements de lecture et d'écriture peuvent être spécifiés.

4. Méthodes courantes

  • truncate(long size) : intercepte le contenu de la longueur d'octet spécifiée du début, supprimez le reste. Si la longueur est supérieure à la taille actuelle du fichier, l'opération échoue.

Quatre tampons

NIO fournit un tampon pour chaque type de données de base, et la méthode de manipulation est la même. Prenons ByteBuffer comme exemple pour faire le tri.

1. Trois attributs importants

  • position : La position actuelle du curseur, utilisée pour déterminer le point de départ de la lecture et l'écriture.

  • limite : limite supérieure, utilisée pour déterminer la plage de lecture et d'écriture, hors index.

  • capacité : Capacité, utilisée pour déterminer la quantité maximale de données pouvant être stockées.

2. Création d'objets

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:在本地创建一个副本,读写操作都是针对副本,写不会反映到原始文件中。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn