Dans Java NIO, si l'un des deux canaux est un FileChannel, vous pouvez directement transférer des données d'un canal (Note du traducteur : le canal est souvent traduit par canal en chinois) vers un autre canal.
transferFrom() : réception passive
La méthode transferFrom() de FileChannel peut transférer des données du canal source vers FileChannel (Note du traducteur : cette méthode se trouve dans la documentation du JDK. interprété comme le transfert d'octets d'un canal d'octets lisible donné vers un fichier sur ce canal). Le paramètre d'entrée position de la méthode
indique à partir de la position pour écrire les données dans le fichier cible, et le nombre indique le nombre maximum d'octets transférés. Si le canal source dispose de moins de octets d'espace restant, le nombre d'octets transférés est inférieur au nombre d'octets demandés.
Notez également que dans l'implémentation de SoketChannel, SocketChannel ne transmettra que les données préparées à ce moment (qui peuvent être inférieures au nombre d'octets). Par conséquent, le SocketChannel ne peut pas transférer toutes les données demandées (nombre d’octets) dans le FileChannel.
transferTo() : Envoyez activement la méthode
transferTo() pour transférer des données de FileChannel vers d'autres canaux. Voici un exemple simple :
Sauf que l'objet FileChannel appelant la méthode est différent, tout le reste est identique.
Les problèmes mentionnés ci-dessus à propos de SocketChannel existent également dans la méthode transferTo(). SocketChannel continuera à transmettre des données jusqu'à ce que le tampon cible soit rempli.
Exemple :
@Testpublic void test2() { RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt", "rw"); FileChannel fromChannel = fromFile.getChannel(); RandomAccessFile toFile = new RandomAccessFile("toFile.txt", "rw"); FileChannel toChannel = toFile.getChannel();long position = 0;long count = fromChannel.size();//从from 读到 本通道;注意socketfrom只会发送已经准备好的,不会发送count个 toChannel.transferFrom(fromChannel,position, count);//将本通道 写到 to;注意sockedfrom会一直发送,直到to被填满 fromChannel.transferTo(position, count, toChannel); }
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!