你知道java.nio.ByteBuffer的任何實現,它包裝一個ByteBuffer實例的數組,使它們看起來像單個實例,而不需要將字節複製到新的緩衝區中?ByteBuffer views
回答
java.nio中沒有實現,但幾乎所有通道都實現GatheringByteChannel
和ScatteringByteChannel
,它們可以直接讀取和寫入ByteBuffers數組。
long write(ByteBuffer[] srcs)
將字節序列從給定的緩衝區此通道。
長
read(ByteBuffer[] dsts)
讀取字節的從此通道入給定緩衝區的序列。
上述方法也有部分版本,請參閱上面的鏈接。
NIO的目標是儘可能降低開銷,這種做法(而不是一個單獨的對象包裝緩衝區)不會產生比簡單數組更多的開銷。我認爲你是這個目標和它們的實現的預期用例。
我知道最接近的是Netty內部的一個名爲Bytes的類,可惜他們並沒有擴展ByteBuffer來實現它。 Channel對我來說是錯誤的類,我想通過一個需要ByteBuffer(不是Channel)的庫來傳遞它。我已經通過複製字節來解決這個問題,但由於很多字節將流經此係統,所以發生的字節複製越少越好。不過謝謝你的想法。 – 2013-03-01 18:27:38
爲什麼不分叉庫並擴展方法來允許一個「ByteBuffer」數組而不是僅僅一個'ByteBuffer'?我猜測正在讀寫的基礎'Channels'將支持上面的操作,並且您不需要改變幾行就可以使其工作。 – 2013-03-01 18:36:01
這是一個有趣的想法,謝謝。我沒有考慮過它。我的直覺是,我需要更多時間才能做到這一點,而不僅僅是自己包裝ByteBuffer。但我會把它釘住,看看它在哪裏。如果他們確實有你期望的底層代碼,那麼我可能會很幸運。 – 2013-03-01 18:55:12
標準Java API中沒有人。 灰熊NIO框架有一個CompositeBuffer,但使用它自己的緩衝區包裝:
import org.glassfish.grizzly.Buffer;
import org.glassfish.grizzly.memory.BuffersBuffer;
import org.glassfish.grizzly.memory.CompositeBuffer;
....
ByteBuffer byteBuffer = ....;
HeapMemoryManager mm = new HeapMemoryManager();
CompositeBuffer buffer = BuffersBuffer.create();
Buffer b = mm.wrap(byteBuffer);
buffer.append(b);
- 1. Drupal Views Views
- 2. LibGDX Texture to ByteBuffer
- 3. JNA的ByteBuffer statvfs
- 4. Java InputStream到ByteBuffer
- 5. Java ByteBuffer類
- 6. 如何從ByteBuffer
- 7. Java中的Bytebuffer
- 8. ByteBuffer vs ChannelBuffer
- 9. java bytebuffer write read append
- 10. Java ByteBuffer Put vs wrap
- 11. One thread one ByteBuffer NIO
- 12. Java的SocketChannel.read(ByteBuffer的)
- 13. Jackson Json,編組ByteBuffer
- 14. ByteBuffer分配和allocateDirect
- 15. 通過SocketChannel的ByteBuffer
- 16. 用ByteBuffer處理byte []
- 17. 從JNI操作ByteBuffer
- 18. ByteBuffer解析unsigned int
- 19. 是否可以從List <ByteBuffer>創建ByteBuffer?
- 20. 來自現有ByteBuffer區域的新Dart ByteBuffer?
- 21. Boost multi_array Views
- 22. Drupal Views參數
- 23. AngularJS views /地區
- 24. Highcharts linked views
- 25. Appcelerator alloy views slide
- 26. Drupal:CCK/Views問題
- 27. Shuffling image views positions
- 28. Swipe-able views iOS
- 29. backbone.js,views和routing
- 30. For loop in views
'ByteBuffer'('Buffer')是固定大小的。不可能做出類似「連接」的事情。你真的想做什麼? – shuangwhywhy 2013-03-01 18:20:49
我正在優化一些依賴於ByteBuffers的低級代碼,並且可以減少發生的字節副本數量。在字節緩衝區之間自然複製字節很簡單,但是由於nio框架已經發現;對於大量的字節反覆這樣做會增加。 – 2013-03-01 18:29:30
爲什麼不一次創建一個大的'ByteBuffer'?或者只是使用數組。 – shuangwhywhy 2013-03-01 18:33:52