Un aperçu
La nouvelle IO, la nouvelle IO introduite à partir de la version java1.4, peut être remplacé la norme IO.
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.
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.
Permet à un thread de surveiller plusieurs canaux.
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 .
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.
Les opérations IO bloquent les threads, NIO ne bloque pas les threads.
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é.
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.
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.
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.
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.
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.
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:在本地创建一个副本,读写操作都是针对副本,写不会反映到原始文件中。
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!