當前位置:編程學習大全網 - 源碼下載 - Netty 框架中ByteBuf轉String的代碼是什麽?

Netty 框架中ByteBuf轉String的代碼是什麽?

代碼是:

ByteBuf buf = (ByteBuf)msg;

byte[] req = new byte[buf.readableBytes()];

buf.readBytes(req);

String body = new String(req,"UTF-8");

Netty之ByteBuf:

ByteBuf是壹個byte存放的緩沖區。

ByteBuf通過兩個位置的指針來協助緩沖區的讀寫操作,讀操作使用readIndex,寫操作使用writeIndex。

ByteBuf根據其數據存儲空間不同有可以分為三種:基於JVM堆內的,基於直接內存的和組合的。

堆內受JVM垃圾收集器的管轄,使用上相對安全壹些,不用每次手動釋放。弊端是GC是會影響性能的;還有就是內存的拷貝帶來的性能損耗(JVM進程到Socket)。

直接內存則不受JVM的管轄,省去了向JVM拷貝數據的麻煩。但是壞處就是別忘了釋放內存,否則就會發生內存泄露。相比於堆內存,直接內存的的分配速度也比較慢。

最佳實踐:在IO通信的線程中的讀寫Buffer使用DirectBuffer(省去內存拷貝的成本),在後端業務消息的處理使用HeapBuffer(不用擔心內存泄露)。

通過hasArray檢查壹個ByteBuf heap based還是direct buffer。

ByteBuf提供了兩個工具類來創建ByteBuf,分別是支持池化的Pooled和普通的Unpooled。Pooled緩存了ByteBuf的實例,提高性能並且減少內存碎片。它使用Jemalloc來高效的分配內存。

如果在Channel中我們可以通過channel.alloc()來拿到ByteBufAllocator,具體它使用Pool還是Unpool,Directed還是Heap取決於程序的配置。

  • 上一篇:山東省濱州市包括哪幾個縣,求名稱?
  • 下一篇:泡面番接檔順序2022年5月
  • copyright 2024編程學習大全網