{"id":1361,"date":"2018-07-25T12:49:26","date_gmt":"2018-07-25T04:49:26","guid":{"rendered":"https:\/\/www.xiaobo.li\/?p=1361"},"modified":"2018-07-25T13:09:47","modified_gmt":"2018-07-25T05:09:47","slug":"netty-bytebuf","status":"publish","type":"post","link":"https:\/\/www.xiaobo.li\/notes\/archives\/1361","title":{"rendered":"[netty] ByteBuf"},"content":{"rendered":"<article>\n<div id=\"article_content\" class=\"article_content clearfix csdn-tracking-statistics\" data-pid=\"blog\" data-mod=\"popu_307\" data-dsm=\"post\">\n<div class=\"htmledit_views\">\n<div>netty \u4e2d\u7684 ByteBuf \u9ed8\u8ba4\u662f\u4f7f\u7528 big-endian<\/div>\n<div><\/div>\n<div><strong>\u4e00\u3001\u521b\u5efa<\/strong><\/div>\n<div>1\u3001\u6c60\u5316\u521b\u5efa ByteBufAllocator<\/div>\n<div>\u83b7\u53d6ByteBufAllocator<\/div>\n<div>Channel channel = ...;<\/div>\n<div>ByteBufAllocator allocator = channel.alloc();<\/div>\n<div><\/div>\n<div>\/\/1....ChannelHandlerContext ctx = ...;<\/div>\n<div>ByteBufAllocator allocator2 = ctx.alloc();<\/div>\n<div>\/\/2<\/div>\n<div><\/div>\n<div>ByteBufAllocator\u4e2d\u521b\u5efabyteBuf\u7684\u65b9\u6cd5<\/div>\n<div>\n<table>\n<colgroup>\n<col \/>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<td>\n<div class=\"table-cell-line\">\u540d\u79f0<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u63cf\u8ff0<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">buffer() buffer(int) buffer(int, int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">Return a ByteBuf with heap-based or direct data storage.<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">heapBuffer() heapBuffer(int) heapBuffer(int, int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">Return a ByteBuf with heap-based storage.<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">directBuffer() directBuffer(int) directBuffer(int, int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">Return a ByteBuf with direct storage.<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">compositeBuffer() compositeBuffer(int) heapCompositeBuffer() heapCompositeBuffer(int) directCompositeBuffer()directCompositeBuffer(int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">Return a CompositeByteBuf that can be expanded by adding heapbased or direct buffers.<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">ioBuffer()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">Return a ByteBuf that will be used for I\/O operations on a socket.<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div><strong>2\u3001Unpooled \uff08\u975e\u6c60\u5316\uff09\u7f13\u5b58<\/strong><\/div>\n<div>\u5f53\u672a\u5f15\u7528 ByteBufAllocator \u65f6\uff0c\u4e0a\u9762\u7684\u65b9\u6cd5\u65e0\u6cd5\u8bbf\u95ee\u5230 ByteBuf\u3002\u5bf9\u4e8e\u8fd9\u4e2a\u7528\u4f8b Netty \u63d0\u4f9b\u4e00\u4e2a\u5b9e\u7528\u5de5\u5177\u7c7b\u79f0\u4e3a Unpooled,\uff0c\u5b83\u63d0\u4f9b\u4e86\u9759\u6001\u8f85\u52a9\u65b9\u6cd5\u6765\u521b\u5efa\u975e\u6c60\u5316\u7684 ByteBuf \u5b9e\u4f8b\u3002\u88685.9\u5217\u51fa\u4e86\u6700\u91cd\u8981\u7684\u65b9\u6cd5<\/div>\n<div>Table 5.9 Unpooled helper class<\/div>\n<div>\n<table>\n<colgroup>\n<col \/>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<td>\n<div class=\"table-cell-line\">\u540d\u79f0<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u63cf\u8ff0<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">buffer() buffer(int) buffer(int, int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">Returns an unpooled ByteBuf with heap-based storage<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">directBuffer() directBuffer(int) directBuffer(int, int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">Returns an unpooled ByteBuf with direct storage<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">wrappedBuffer()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">Returns a ByteBuf, which wraps the given data.<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">copiedBuffer()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">Returns a ByteBuf, which copies the given data<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\u5728 \u975e\u8054\u7f51\u9879\u76ee\uff0c\u8be5 Unpooled \u7c7b\u4e5f\u4f7f\u5f97\u5b83\u66f4\u5bb9\u6613\u4f7f\u7528\u7684 ByteBuf API\uff0c\u83b7\u5f97\u4e00\u4e2a\u9ad8\u6027\u80fd\u7684\u53ef\u6269\u5c55\u7f13\u51b2 API\uff0c<\/div>\n<div><strong>3\u3001<\/strong><strong>ByteBufUtil\u521b\u5efa \uff08ByteBufUtil\u4e2d\u6709\u5f88\u591a\u64cd\u4f5cbuf\u7684API\uff09<\/strong><\/div>\n<div><\/div>\n<div><strong>\u4e8c\u3001\u8bfb get\/read get\u4e0d\u4f1a\u6539\u53d8\u8bfb\u7d22\u5f15\uff0cread\u4f1a\u6539\u53d8\u8bfb\u7d22\u5f15<\/strong><\/div>\n<div>\n<table>\n<colgroup>\n<col \/>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<td>\n<div class=\"table-cell-line\">getBoolean(int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u5f53\u524d\u7d22\u5f15\u7684 Boolean \u503c<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">getByte(int) getUnsignedByte(int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u5f53\u524d\u7d22\u5f15\u7684(\u65e0\u7b26\u53f7)\u5b57\u8282<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">getMedium(int) getUnsignedMedium(int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u5f53\u524d\u7d22\u5f15\u7684 (\u65e0\u7b26\u53f7) 24-bit \u4e2d\u95f4\u503c<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">getInt(int) getUnsignedInt(int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u5f53\u524d\u7d22\u5f15\u7684(\u65e0\u7b26\u53f7) \u6574\u578b<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">getLong(int) getUnsignedLong(int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u5f53\u524d\u7d22\u5f15\u7684 (\u65e0\u7b26\u53f7) Long \u578b<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">getShort(int) getUnsignedShort(int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u5f53\u524d\u7d22\u5f15\u7684 (\u65e0\u7b26\u53f7) Short \u578b<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">getBytes(int, ...)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5b57\u8282<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div><\/div>\n<div>\n<table>\n<colgroup>\n<col \/>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<td>\n<div class=\"table-cell-line\">\u65b9\u6cd5\u540d\u79f0<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u63cf\u8ff0<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">readBoolean()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u3000\u8fd4\u56de\u5f53\u524d\u7d22\u5f15\u7684Boolean\u503c\uff0c\u8bfb\u7d22\u5f15\u52a0\u4e00<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">readByte()<\/div>\n<div class=\"table-cell-line\">readUnsignedByte()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u5f53\u524d\u7d22\u5f15\u7684(\u65e0\u7b26\u53f7)\u5b57\u8282\uff0c\u8bfb\u7d22\u5f15\u52a0\u4e00<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">readMedium()<\/div>\n<div class=\"table-cell-line\">readUnsignedMedium()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u5f53\u524d\u7d22\u5f15\u7684 (\u65e0\u7b26\u53f7) 24-bit \u4e2d\u95f4\u503c\uff0c\u8bfb\u7d22\u5f15\u52a03<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">readInt()<\/div>\n<div class=\"table-cell-line\">readUnsignedInt()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u3000\u8fd4\u56de\u5f53\u524d\u7d22\u5f15\u7684(\u65e0\u7b26\u53f7) \u6574\u578b\uff0c\u8bfb\u7d22\u5f15\u52a04<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">readLong()<\/div>\n<div class=\"table-cell-line\">readUnsignedLong()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u3000\u8fd4\u56de\u5f53\u524d\u7d22\u5f15\u7684 (\u65e0\u7b26\u53f7) Long \u578b\uff0c\u8bfb\u7d22\u5f15\u52a08<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">readShort()<\/div>\n<div class=\"table-cell-line\">readUnsignedShort()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u5f53\u524d\u7d22\u5f15\u7684 (\u65e0\u7b26\u53f7) Short \u578b\uff0c\u8bfb\u7d22\u5f15\u52a02<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">readBytes(int,int, ...)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u3001\u653e\u56de\u5f53\u524d\u4f4d\u7f6e\u5230length<\/div>\n<div class=\"table-cell-line\">\u5f97\u4e00\u4e2a\u5b57\u8282\u6570\u7ec4\uff0c\u8bfb\u7d22\u5f15\u52a0length<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div><\/div>\n<div><\/div>\n<div><strong>\u4e09\u3001\u5199\u64cd\u4f5c set\/write<\/strong><\/div>\n<div>\n<table>\n<colgroup>\n<col \/>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<td>\n<div class=\"table-cell-line\">\u65b9\u6cd5\u540d\u79f0<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u63cf\u8ff0<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">setBoolean(int, boolean)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5728\u6307\u5b9a\u7684\u7d22\u5f15\u4f4d\u7f6e\u8bbe\u7f6e Boolean \u503c<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">setByte(int, int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5728\u6307\u5b9a\u7684\u7d22\u5f15\u4f4d\u7f6e\u8bbe\u7f6e byte \u503c<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">setMedium(int, int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5728\u6307\u5b9a\u7684\u7d22\u5f15\u4f4d\u7f6e\u8bbe\u7f6e 24-bit \u4e2d\u95f4 \u503c<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">setInt(int, int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5728\u6307\u5b9a\u7684\u7d22\u5f15\u4f4d\u7f6e\u8bbe\u7f6e int \u503c<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">setLong(int, long)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5728\u6307\u5b9a\u7684\u7d22\u5f15\u4f4d\u7f6e\u8bbe\u7f6e long \u503c<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">setShort(int, int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5728\u6307\u5b9a\u7684\u7d22\u5f15\u4f4d\u7f6e\u8bbe\u7f6e short \u503c<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div><\/div>\n<div>\n<table>\n<colgroup>\n<col \/>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<td>\n<div class=\"table-cell-line\">\u65b9\u6cd5\u540d\u79f0<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u63cf\u8ff0<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">writeBoolean(boolean)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5728\u6307\u5b9a\u7684\u7d22\u5f15\u4f4d\u7f6e\u8bbe\u7f6e Boolean \u503c\uff0c\u5199\u7d22\u5f15\u52a0\u4e00<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">writeByte(int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5728\u6307\u5b9a\u7684\u7d22\u5f15\u4f4d\u7f6e\u8bbe\u7f6e byte \u503c\uff0c\u5199\u7d22\u5f15\u52a0\u4e00<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">writeMedium(int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5728\u6307\u5b9a\u7684\u7d22\u5f15\u4f4d\u7f6e\u8bbe\u7f6e 24-bit \u4e2d\u95f4 \u503c\uff0c\u5199\u7d22\u5f15\u52a03<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">writeInt(int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5728\u6307\u5b9a\u7684\u7d22\u5f15\u4f4d\u7f6e\u8bbe\u7f6e int \u503c\uff0c\u5199\u7d22\u5f15\u52a04<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">writeLong(long)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5728\u6307\u5b9a\u7684\u7d22\u5f15\u4f4d\u7f6e\u8bbe\u7f6e long \u503c\uff0c\u5199\u7d22\u5f15\u52a08<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">writeShort(int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5728\u6307\u5b9a\u7684\u7d22\u5f15\u4f4d\u7f6e\u8bbe\u7f6e short \u503c\uff0c\u5199\u7d22\u5f15\u52a02<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">writeBytes(int\uff0c...\uff09<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u3000\u5728\u5f53\u524d\u7d22\u5f15\u5199\u5165\u4e00\u4e2aByte\u6570\u7ec4\uff0c\u5199\u7d22\u5f15\u52a0\u6570\u7ec4\u957f\u5ea6<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div><\/div>\n<div><strong>\u56db\u3001\u7d22\u5f15\u7ba1\u7406<\/strong><\/div>\n<div>\n<table>\n<colgroup>\n<col \/>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<td>\n<div class=\"table-cell-line\">markReaderIndex(),<\/div>\n<div class=\"table-cell-line\">\u00a0markWriterIndex()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u6807\u8bb0\u8bfb\uff08\u5199\uff09\u7d22\u5f15<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">resetReaderIndex()<\/div>\n<div class=\"table-cell-line\">resetWriterIndex()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8bfb\uff08\u5199\uff09\u7d22\u5f15\u56de\u5230mark\u6807\u8bb0\u7684\u7d22\u5f15\u503c<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">readerIndex(int)<\/div>\n<div class=\"table-cell-line\">\u00a0writerIndex(int)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5c06\u8bfb\uff08\u5199\uff09\u7d22\u5f15\u8bbe\u7f6e\u5230\u6307\u5b9a\u4f4d\u7f6e<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">clear()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u53ef\u4ee5\u540c\u65f6\u8bbe\u7f6e readerIndex \u548c writerIndex \u4e3a 0\u3002\u8fd9\u4e0d\u4f1a\u6e05\u9664\u5185\u5b58\u4e2d\u7684\u5185\u5bb9<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div><\/div>\n<div><strong>\u4e94\u3001\u67e5\u627e<\/strong><\/div>\n<div>\n<table>\n<colgroup>\n<col \/>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<td>\n<div class=\"table-cell-line\"><strong>for<\/strong>EachByte\uff08ByteBufProcessor.FIND_NUL\uff09<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u67e5\u627ebyte,\u8fd4\u56debyte\u7684\u7d22\u5f15<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div><\/div>\n<div><strong>\u516d\u3001\u526f\u672c<\/strong><\/div>\n<div>\n<table>\n<colgroup>\n<col \/>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<td>\n<div class=\"table-cell-line\">duplicate()<\/div>\n<div class=\"table-cell-line\">slice()<\/div>\n<div class=\"table-cell-line\">slice(int, int)<\/div>\n<div class=\"table-cell-line\">readOnly(),<\/div>\n<div class=\"table-cell-line\">order(ByteOrder)<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u6240\u6709\u8fd9\u4e9b\u90fd\u8fd4\u56de\u4e00\u4e2a\u65b0\u7684 ByteBuf \u5b9e\u4f8b\u5305\u62ec\u5b83\u81ea\u5df1\u7684 reader, writer \u548c\u6807\u8bb0\u7d22\u5f15\u3002\u7136\u800c\uff0c\u5185\u90e8\u6570\u636e\u5b58\u50a8\u5171\u4eab\u5c31\u50cf\u5728\u4e00\u4e2a NIO \u7684 ByteBuffer<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\"><em>\u00a0copy()<\/em><\/div>\n<div class=\"table-cell-line\"><em>\u00a0copy(int, int)<\/em><\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\"><em>\u8fd4\u56de\u7684 ByteBuf \u6709\u6570\u636e\u7684\u72ec\u7acb\u526f\u672c\u3002<\/em><\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div><\/div>\n<div><strong>\u4e03\u3001\u5176\u4ed6<\/strong><\/div>\n<div>\n<table>\n<colgroup>\n<col \/>\n<col \/><\/colgroup>\n<tbody>\n<tr>\n<td>\n<div class=\"table-cell-line\">\u65b9\u6cd5\u540d\u79f0<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u63cf\u8ff0<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">isReadable()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u662f\u5426\u6709\u5b57\u8282\u53ef\u8bfb<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">isWritable()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u662f\u5426\u53ef\u4ee5\u5199<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">readableBytes()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u53ef\u4ee5\u8bfb\u7684\u5b57\u8282\u957f\u5ea6<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">writablesBytes()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56de\u53ef\u4ee5\u5199\u7684\u5b57\u8282\u573a\u5730<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">capacity()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56debyteBuf\u7684\u5bb9\u91cf<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">maxCapacity()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u8fd4\u56debyteBuf\u53ef\u4ee5\u6709\u7684\u6700\u5927\u5bb9\u91cf<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">hasArray()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">\u5982\u679cbyteBuf\u53ef\u4ee5\u76f4\u63a5\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5c31\u8fd4\u56detrue<\/div>\n<div class=\"table-cell-line\">(heap buf\u624d\u4f1a\u4e3atrue)<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<div class=\"table-cell-line\">array()<\/div>\n<\/td>\n<td>\n<div class=\"table-cell-line\">hasArray\u8fd4\u56detrue,\u8be5\u65b9\u6cd5\u5c31\u4f1a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<\/article>\n<div class=\"article-bar-bottom\">\n<div class=\"tags-box\"><\/div>\n<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div class=\"article-bar-bottom\">\n<div><\/div>\n<div>.<\/div>\n<div><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>netty \u4e2d\u7684 ByteBuf \u9ed8\u8ba4\u662f\u4f7f\u7528 big-endian \u4e00\u3001\u521b\u5efa 1 &hellip; <a href=\"https:\/\/www.xiaobo.li\/notes\/archives\/1361\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[297],"tags":[222],"class_list":["post-1361","post","type-post","status-publish","format-standard","hentry","category-java","tag-netty"],"_links":{"self":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts\/1361","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/comments?post=1361"}],"version-history":[{"count":0,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts\/1361\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/media?parent=1361"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/categories?post=1361"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/tags?post=1361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}