Java中的ByteBuffer
的示例應用程序是什麼?請列出使用此類示例的任何示例場景。謝謝!Java中的ByteBuffer有什麼用途?
回答
This是它的用途和缺點的一個很好的說明。每當你需要做快速的低級I/O時,你都會使用它。如果你打算實現一個TCP/IP協議,或者你正在編寫一個數據庫(DBMS),這個類將派上用場。
ByteBuffer類很重要,因爲它構成了在Java中使用通道的基礎。 字節緩衝區類在字節緩衝器限定六類操作:
相對bulk get方法,從這個緩衝到一個數組傳輸的字節的連續序列;
相對bulk put將連續字節序列從字節數組或其他字節緩衝區傳輸到此緩衝區的方法;
絕對和相對get和put方法和寫入其他原始類型的值,將它們轉換到和從在一個特定的字節順序的字節序列;
方法用於創建視圖緩衝劑,其允許含有其他原語類型的值的緩衝器要觀看的字節緩衝器;和
方法爲compacting,duplicating和slicing一個字節緩衝區。
Example code : Putting Bytes into a buffer.
// Create an empty ByteBuffer with a 10 byte capacity
ByteBuffer bbuf = ByteBuffer.allocate(10);
// Get the buffer's capacity
int capacity = bbuf.capacity(); // 10
// Use the absolute put(int, byte).
// This method does not affect the position.
bbuf.put(0, (byte)0xFF); // position=0
// Set the position
bbuf.position(5);
// Use the relative put(byte)
bbuf.put((byte)0xFF);
// Get the new position
int pos = bbuf.position(); // 6
// Get remaining byte count
int rem = bbuf.remaining(); // 4
// Set the limit
bbuf.limit(7); // remaining=1
// This convenience method sets the position to 0
bbuf.rewind(); // remaining=7
在Android中可以創建和Java℃之間共享緩衝器++(以directAlloc法)和操縱它在兩側。
使用面向流的API的JAVA IO使用緩衝區作爲用戶空間內數據的臨時存儲。通過DMA從磁盤讀取的數據首先被複制到內核空間的緩衝區中,然後再傳送到用戶空間的緩衝區。因此有開銷。避免它可以在性能上獲得可觀的收益。
我們可以跳過用戶空間這個臨時緩衝區,如果有直接的方式訪問緩衝區在內核空間。 JAVA NIO提供了這樣做的方法。
ByteBuffer是由JAVA NIO提供的幾個緩衝區之一。它只是一個容器或容器來讀取數據或寫入數據。上述行爲通過在緩衝區上使用allocateDirect()API分配直接緩衝區來實現。
Here是一個偉大的文章,解釋ByteBuffer的好處。以下是文章的關鍵點:字節緩衝區的
- 先發優勢,而不論它是直接或間接的被結構化的二進制數據(例如,低級別的IO如在一個規定的高效的隨機存取答案)。在Java 1.4之前,要讀取這樣的數據,可以使用DataInputStream,但不能隨機訪問。
以下是專門針對直接ByteBuffer/MappedByteBuffer的好處。需要注意的是直接緩衝區堆之外創建:
不受GC週期:直接緩衝區不會在垃圾收集週期,因爲他們居住堆外移動。 TerraCota的BigMemory緩存技術似乎很大程度上依賴於這一優勢。如果他們堆在一起,它會減慢gc暫停時間。
性能升壓:在流IO,讀呼叫將需要系統調用,這需要用戶之間的上下文切換到內核模式,反之亦然,這將是昂貴的,特別是如果正在不斷訪問的文件。但是,使用內存映射時,這種上下文切換會減少,因爲數據更有可能在內存中找到(MappedByteBuffer)。如果數據在內存中可用,則直接訪問它而不調用OS,即不進行上下文切換。
請注意,MappedByteBuffers非常有用,特別是如果文件很大並且塊的訪問次數更少。
- 頁共享:內存映射文件可以在進程之間共享,因爲它們是在進程的虛擬內存空間分配,並且可以跨進程共享。
- 1. java中的hypen( - )有什麼用途
- 2. Java中的Buffer的用途是什麼?
- 3. Java中`<< ='的用途是什麼?
- 4. Java中IO Streams的用途是什麼?
- 5. Java NIO中的ByteBuffer和CharBuffer有什麼區別?
- 6. Java中的Bytebuffer
- 7. JavaScript中的x ++有什麼用途?
- 8. simple_form中的url有什麼用途?
- 9. array.prototype.slice.call中的原型有什麼用途
- 10. android中的onActivityResult有什麼用途
- 11. auto有什麼用途?
- 12. ons.ready()有什麼用途?
- 13. Joomla有什麼用途?
- 14. iPhone:Airplay SDK有什麼用途?
- 15. Log4j API有什麼用途?
- 16. Java常量池的用途是什麼?
- 17. Java InitialDirContext()的用途/好處是什麼?
- 18. Java Char數組的用途是什麼?
- 19. Java中的數字數據類型有什麼用途?
- 20. java中的字節代碼有什麼用途
- 21. 從JAVA的URL對象中讀取數據有什麼用途
- 22. HyerLinkField中使用HeaderText有什麼用途
- 23. GrayLog2中使用MongoDB有什麼用途?
- 24. jquery中使用$ .data()有什麼用途
- 25. 在java中使用靜態同步方法有什麼用途?
- 26. Java代理有什麼有趣的用途?
- 27. Path =在XAML中有什麼用途?
- 28. 在oracle中有什麼用途?
- 29. makeEmptyFunction在fbjs中有什麼用途?
- 30. 什麼是最有用的Java多用途開源庫?
Apache Hadoop的壓縮(例如zlib編解碼器)使用jave.nio的ByteBuffer。 – nikk 2016-06-14 14:23:49