Jakie są przykładowe aplikacje dla ByteBuffer
Java? Proszę wymienić wszystkie przykładowe scenariusze, w których jest to używane. Dziękuję Ci!
java
buffer
bytebuffer
Aklin
źródło
źródło
Odpowiedzi:
Jest to dobry opis jego zastosowań i wad. Zasadniczo korzystasz z niego, ilekroć potrzebujesz szybkiego We / Wy niskiego poziomu. Jeśli zamierzasz wdrożyć protokół TCP / IP lub piszesz bazę danych (DBMS), ta klasa byłaby przydatna.
źródło
Klasa ByteBuffer jest ważna, ponieważ stanowi podstawę do korzystania z kanałów w Javie. Klasa ByteBuffer definiuje sześć kategorii operacji na buforach bajtów, zgodnie z dokumentacją Java 7 :
Example code : Putting Bytes into a buffer.
źródło
Java IO korzystające z interfejsów API zorientowanych na strumień jest wykonywane przy użyciu bufora jako tymczasowego przechowywania danych w przestrzeni użytkownika. Dane odczytywane z dysku przez DMA są najpierw kopiowane do buforów w przestrzeni jądra, a następnie przesyłane do bufora w przestrzeni użytkownika. Stąd jest narzut. Unikanie tego może osiągnąć znaczny wzrost wydajności.
Moglibyśmy pominąć ten tymczasowy bufor w przestrzeni użytkownika, gdyby istniał sposób bezpośredniego dostępu do bufora w przestrzeni jądra. Java NIO zapewnia na to sposób.
ByteBuffer
należy do kilku buforów udostępnianych przez Java NIO. To tylko pojemnik lub zbiornik do przechowywania danych do odczytu lub zapisu danych. Powyższe zachowanie uzyskuje się przez przydzielenie bufora bezpośredniego za pomocąallocateDirect()
interfejsu API w buforze.Dokumentacja Java Byte Buffer zawiera przydatne informacje.
źródło
W Androidzie możesz utworzyć wspólny bufor między C ++ i Javą (metodą directAlloc) i manipulować nim po obu stronach.
źródło
Oto świetny artykuł wyjaśniający zalety ByteBuffer. Oto kluczowe punkty tego artykułu:
Poniżej przedstawiono korzyści specjalnie dla bezpośrednich ByteBuffer / MappedByteBuffer. Zauważ, że bezpośrednie bufory są tworzone poza stertą:
Nie dotyczy cyklów gc : bufory bezpośrednie nie zostaną przeniesione podczas cykli wyrzucania elementów bezużytecznych, ponieważ znajdują się poza stertą. Wydaje się, że technologia buforowania BigMemory firmy TerraCota opiera się na tej przewadze. Gdyby były na stosie, spowolniłoby to czasy pauzy.
Zwiększenie wydajności : w strumieniu We / Wy wywołania odczytu pociągałyby za sobą wywołania systemowe, które wymagają przełączania kontekstu między trybem użytkownika a trybem jądra i odwrotnie, co byłoby kosztowne, zwłaszcza jeśli plik byłby stale dostępny. Jednak w przypadku mapowania pamięci to przełączanie kontekstu jest zmniejszone, ponieważ dane są bardziej prawdopodobne w pamięci (MappedByteBuffer). Jeśli dane są dostępne w pamięci, można uzyskać do nich bezpośredni dostęp bez wywoływania systemu operacyjnego, tj. Bez przełączania kontekstu.
Zauważ, że MappedByteBuffers są bardzo przydatne, szczególnie jeśli pliki są duże i dostęp do kilku grup bloków jest uzyskiwany częściej.
źródło