Wenn in Java NIO einer der beiden Kanäle ein FileChannel ist, können Sie Daten direkt von einem Kanal (Anmerkung des Übersetzers: Kanal wird auf Chinesisch oft als Kanal übersetzt) auf einen anderen Kanal übertragen.
transferFrom(): passiver Empfang
Die transferFrom()-Methode von FileChannel kann Daten vom Quellkanal an FileChannel übertragen (Anmerkung des Übersetzers: Diese Methode ist in der JDK-Dokumentation enthalten wird als Übertragung von Bytes von einem bestimmten lesbaren Byte-Kanal in eine Datei auf diesem Kanal interpretiert. Der Eingabeparameter position der Methode
gibt an, ab welcher Position Daten in die Zieldatei geschrieben werden sollen, und count gibt die maximale Anzahl der übertragenen Bytes an. Wenn der Quellkanal über weniger als 50 Bytes verbleibenden Speicherplatz verfügt, ist die Anzahl der übertragenen Bytes geringer als die Anzahl der angeforderten Bytes.
Beachten Sie außerdem, dassSocketChannel bei der Implementierung von SoketChannel nur die zu diesem Zeitpunkt vorbereiteten Datenüberträgt (die möglicherweise weniger als die Anzahl der Bytes betragen). Daher überträgt der SocketChannel möglicherweise nicht alle angeforderten Daten (Anzahl der Bytes) in den FileChannel.
transferTo(): Senden Sie aktiv die Methode
transferTo(), um Daten von FileChannel an andere Kanäle zu übertragen. Das Folgende ist ein einfaches Beispiel:
Abgesehen davon, dass das FileChannel-Objekt, das die Methode aufruft, anders ist, ist alles andere gleich.
Die oben genannten Probleme zu SocketChannel bestehen auch bei der Methode transferTo().SocketChannel überträgt weiterhin Daten, bis der Zielpuffer gefüllt ist.
Beispiel:
@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); }
Das obige ist der detaillierte Inhalt vonErläuterung der Datenübertragungsmethoden zwischen Kanälen in JAVA. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!