Inhaltsverzeichnis
Kanal
1 Implementierung des Kanals
2. Einfaches Kanalbeispiel
Heim Java javaLernprogramm Detaillierte Erklärung des Kanals in JAVA

Detaillierte Erklärung des Kanals in JAVA

Jun 25, 2017 am 10:14 AM
channel

Hinweis: Nachdruck von Concurrent Programming Network – ifeve.comLinkadresse dieses Artikels:Java NIO Series Tutorial (2) Kanal

Kanal

Der Kanal von Java NIO ähnelt Stream, es gibt jedoch einige Unterschiede:

  • kann sowohl Daten vom Kanal lesen als auch Daten in den Kanal schreiben. Aber Lese- und Schreibströme sind normalerweise einseitig.

  • Kanäle können asynchron gelesen und geschrieben werden.

  • Die Daten im Kanal müssen zuerst aus einem Puffer gelesen oder immer aus einem Puffer geschrieben werden.

Wie oben erwähnt, werden Daten vom Kanal in den Puffer gelesen und Daten vom Puffer in den Kanal geschrieben. Wie in der folgenden Abbildung dargestellt:

1 Implementierung des Kanals

Dies sind die Implementierungen der wichtigsten Kanäle in Java NIO:

  • FileChannel

  • DatagramChannel

  • SocketChannel

  • ServerSocketChannel

FileChannel liest und schreibt Daten aus Dateien.

DatagramChannel kann Daten im Netzwerk über UDP lesen und schreiben.

SocketChannel kann über TCP Daten im Netzwerk lesen und schreiben.

ServerSocketChannel kann neue eingehende TCP-Verbindungen überwachen, genau wie ein Webserver. Für jede neue eingehende Verbindung wird ein SocketChannel erstellt.

2. Einfaches Kanalbeispiel

Das Folgende ist ein Beispiel für die Verwendung von FileChannel zum Einlesen von Daten in einen Puffer:

public class Channel1 {public static void main(String[] args) {try {
            RandomAccessFile raf = new RandomAccessFile("./.gitignore","rw");
            FileChannel channel = raf.getChannel();     //获取通道ByteBuffer bf = ByteBuffer.allocate(50);    //通过静态allocate方法创建一个缓冲区,容量为50byte[] bytes = new byte[]{};
            bytes = "123".getBytes();
            bf = ByteBuffer.wrap(bytes);                //通过静态wrap方法,byte数组生成缓冲区,缓冲区中保留了原数据while(bf.hasRemaining()){
                System.out.print((char) bf.get());
            }int bytesRead ;while ((bytesRead = channel.read(bf)) != -1) {      //将通道中的数据写入缓冲区,并判断通道中的数据是否到末尾System.out.println("Read " + bytesRead);bf.flip();                                      //反转缓冲区 实际上就是将position置为0 后续buffer详细介绍while(bf.hasRemaining()){                       //判断缓冲区中是否还有值System.out.print((char) bf.get());          //输出缓冲区中的值                }
                bf.clear();                                     //清理缓冲区            }
            raf.close();                                        //关闭RandomAccessFile} catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Nach dem Login kopieren

Achten Sie auf den Aufruf von buf.flip (), lesen Sie zuerst die Daten in den Puffer, kehren Sie dann den Puffer um und lesen Sie dann die Daten aus dem Puffer. Im nächsten Abschnitt werden weitere Details zu Buffer erläutert

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Kanals in JAVA. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was bedeutet Kanal in der Go-Sprache? Was bedeutet Kanal in der Go-Sprache? Dec 14, 2023 pm 02:21 PM

Der Kanal in der Go-Sprache ist ein Mechanismus zur Kommunikation und Datensynchronisation zwischen Coroutinen. Man kann es sich als einen speziellen Datentyp vorstellen, ähnlich einer Warteschlange oder Pipe, der zum Übertragen von Daten zwischen verschiedenen Coroutinen verwendet wird. Der Kanal bietet zwei Hauptoperationen: Senden und Empfangen. Sowohl Sende- als auch Empfangsvorgänge in einem Kanal sind blockierend. Das heißt, wenn kein Sender oder Empfänger bereit ist, wird der Vorgang blockiert, bis eine Coroutine bereit ist, den entsprechenden Vorgang usw. auszuführen.

Wie kommunizieren Golang-Funktionen über Kanäle mit Goroutine? Wie kommunizieren Golang-Funktionen über Kanäle mit Goroutine? May 01, 2024 pm 09:42 PM

Die Go-Sprache nutzt Kanäle und Goroutinen zur Kommunikation. Nach dem Erstellen des Kanals kann die Goroutine übergeben werden

Wie kann das Problem der gleichzeitigen Neuordnung von Aufgaben in der Go-Sprache gelöst werden? Wie kann das Problem der gleichzeitigen Neuordnung von Aufgaben in der Go-Sprache gelöst werden? Oct 09, 2023 pm 10:55 PM

Wie kann das Problem der gleichzeitigen Neuordnung von Aufgaben in der Go-Sprache gelöst werden? Bei der gleichzeitigen Programmierung ist die Ausführungsreihenfolge von Aufgaben häufig ungewiss, was insbesondere bei Aufgaben mit Abhängigkeiten zu Problemen führen kann. In der Go-Sprache können wir das Problem der gleichzeitigen Neuordnung von Aufgaben mithilfe von Kanälen und Coroutinen lösen. Im Folgenden erklären wir Ihnen im Detail, wie Sie dies erreichen. Typischerweise nutzen wir Kanäle, um eine Synchronisierung und Kommunikation von Aufgaben zu erreichen. In der Go-Sprache können Kanäle als übergeordnete Synchronisationsprimitive verwendet werden, um die Ausführungsreihenfolge von Aufgaben sicherzustellen. Durch die Verwendung von gepuffert

Wie verwende ich einen Kanal in der Go-Sprache? Wie verwende ich einen Kanal in der Go-Sprache? Jun 09, 2023 pm 08:13 PM

In der Go-Sprache ist der Kanal ein wichtiger Mechanismus, um gleichzeitige Kommunikation zu erreichen. Es bietet eine Möglichkeit, Daten von einer Goroutine an eine andere weiterzugeben und so Datensynchronisierung und Zusammenarbeit zu erreichen. In diesem Artikel werden die grundlegende Verwendung von Kanälen in der Go-Sprache sowie einige Vorsichtsmaßnahmen vorgestellt. 1. Deklaration und Initialisierung des Kanals In der Go-Sprache erfordert die Deklaration eines Kanals die Verwendung des Beispielcodes der Funktion make()

So verwenden Sie den Java-Kanal So verwenden Sie den Java-Kanal Apr 19, 2023 am 11:22 AM

1. Erklären Sie, dass Channel ein Objekt ist, über das Daten gelesen und geschrieben werden können. Es kann als Stream in IO angezeigt werden. Im Vergleich zu Streams gibt es jedoch einige Unterschiede: Der Kanal ist bidirektional und kann gelesen oder geschrieben werden, während Streams unidirektional sind. Kanal kann asynchron gelesen und geschrieben werden. Das Lesen und Schreiben des Kanals muss über das Pufferobjekt erfolgen. 2. Das Beispiel wird mit Kanälen und indirekten Puffern vervollständigt. FileInputStreamfis=null;//Referenz FileOutputStreamfout=null;FileChannelchannel=null;//Kanalreferenz FileChanneloutchannel=null;try{fi

学习channel设计:从入门到放弃 学习channel设计:从入门到放弃 Aug 08, 2023 pm 04:33 PM

今天给大家带来的是Go语言中的channel。Go语言从出世以来就以高并发著称,得益于其Goroutine的设计,Goroutine也就是一个可执行的轻量级协程,有了Goroutine我们可以轻松的运行协程,但这并不能满足我们的需求,我们往往还希望多个线程/协程是能够通信的。

Gelernt! Verwenden Sie gepufferte Kanäle als Mutexe Gelernt! Verwenden Sie gepufferte Kanäle als Mutexe Aug 08, 2023 pm 04:21 PM

Das Sync-Paket stellt grundlegende Synchronisierungsprimitive wie Mutex-Sperren bereit. Mit Ausnahme der Typen Once und WaitGroup sind die meisten anderen Typen für die zugrunde liegende Funktionsbibliothek vorgesehen. Eine Synchronisierung auf höherer Ebene lässt sich besser über Kanäle und Kommunikation erreichen.

Wie gehe ich mit gleichzeitigen Aufgabenwarteschlangenproblemen in der Go-Sprache um? Wie gehe ich mit gleichzeitigen Aufgabenwarteschlangenproblemen in der Go-Sprache um? Oct 09, 2023 am 11:29 AM

Wie gehe ich mit gleichzeitigen Aufgabenwarteschlangenproblemen in der Go-Sprache um? Während der Entwicklung stoßen wir häufig auf Szenarien, in denen eine große Anzahl von Aufgaben bearbeitet werden muss. Manchmal ist die Anzahl der Aufgaben sehr groß und muss gleichzeitig ausgeführt werden, was die Verwendung von Aufgabenwarteschlangen für die Verarbeitung erfordert. Als Programmiersprache, die Parallelität unterstützt, bietet die Go-Sprache viele Möglichkeiten, gleichzeitige Aufgabenwarteschlangen zu verarbeiten. In diesem Artikel werden eine gängige Verarbeitungsmethode vorgestellt und spezifische Codebeispiele gegeben. Die Datenstruktur der Aufgabenwarteschlange ist eine First-In-First-Out-Datenstruktur (FIFO). In Go-Sprache

See all articles