首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ByteBuffer的用法

ByteBuffer是NIO里用得最多的Buffer。 ByteBuffer最核心的方法是put(byte)和get()。分别是往ByteBuffer里写一个字节,和读一个字节。...值得注意的是,ByteBuffer的读写模式是分开的,正常的应用场景是:往ByteBuffer里写一些数据,然后flip(),然后再读出来。 我们先来看看ByteBuffer的几个主要的方法。...可以通过,ByteBuffer buffer=ByteBuffer.allocate(256);创建或者 ByteBuffer buffer=ByteBuffer.wrap(byteArray);这里的...buffer.clear(); 这个方法实际上也不会改变缓冲区的数据,而只是简单的重置了缓冲区的主要索引值,不必为了每次读写都创建新的缓冲区,那样做会降低性能。...给大家两个例子: 这个代码是针对有数据的ByteBuffer,我们读取出来数据,写成文件的操作。之前用来做H264写文件用到的。仅供参考。

1.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    NIO之SocketChannel,SocketChannel ,DatagramChannel解读

    基本概述 (1)SocketChannel 就是 NIO 对于非阻塞 socket 操作的支持的组件,其在 socket 上 封装了一层,主要是支持了非阻塞的读写。...如果 SocketChannel 在一个线程上 read 阻塞,另 一个线程对该 SocketChannel 调用 shutdownInput,则读阻塞的线程将返回-1 表示没有 读取任何数据;如果 SocketChannel...在一个线程上 write 阻塞,另一个线程对该 SocketChannel 调用 shutdownWrite,则写阻塞的线程将抛出AsynchronousCloseException SocketChannel...", 80)); ByteBuffer byteBuffer = ByteBuffer.allocate(16); socketChannel.read(byteBuffer); socketChannel.close...(false); ByteBuffer byteBuffer = ByteBuffer.allocate(16); socketChannel.read(byteBuffer); socketChannel.close

    42530

    NIO从入门到踹门

    2.1.2 常用的类型ByteBuffer 一般我们常用的类型是ByteBuffer,把数据转成字节进行处理。实质上是一个byte[]数组。...HeapByteBuffer的使用场景: 除了以上的场景外,其他情况还是建议使用HeapByteBuffer,没有达到一定的量级,实际上使用DirectByteBuffer是体现不出优势的。...所以可以看出实质上capacity容量大小是不变的,实际上是通过控制position和limit的值来控制读写的数据。 2.2 管道(Channel) 首先我们看一下Channel有哪些子类: ?...这就是一个简单的例子,实际上上面的例子是阻塞式的。要做到非阻塞还需要使用选择器Selector。...2.3 选择器(Selector) Selector翻译成选择器,有些人也会翻译成多路复用器,实际上指的是同一样东西。 只有网络IO才会使用选择器,文件IO是不需要使用的。

    95620

    【Netty】NIO 网络编程 聊天室案例

    处理客户端消息转发事件 : ① 读取客户端上传的数据 : 通过 SelectionKey 获取 通道 和 缓冲区 , 使用 套接字通道 ( SocketChannel ) 读取 缓冲区 ( ByteBuffer...message)); } catch (IOException e) { //e.printStackTrace(); // 如果此处出现异常, 说明该客户端离线了, 服务器提示, 取消选择器上的注册信息...IOException e) { //e.printStackTrace(); // 如果此处出现异常, 说明该客户端离线了, 服务器提示, 取消选择器上的注册信息...//e.printStackTrace(); // 如果此处出现异常, 说明该客户端离线了, 服务器提示, 取消选择器上的注册信息...//e.printStackTrace(); // 如果此处出现异常, 说明该客户端离线了, 服务器提示, 取消选择器上的注册信息

    1.4K10

    JAVA NIO Socket通道

    DatagramChannel和SocketChannel都实现定义读写功能,ServerSocketChannel不实现,只负责监听传入的连接,并建立新的SocketChannel,本身不传输数据。...一个通道可以被注册到多个选择器上,但在每个选择器上,只能注册一次。...选择器: Selector上的已注册键集合中,会存在失效键、null,keys()返回,不可修改。 已选择键集合,selectedKeys()返回,已经准备好的键集合,可能为空。...调用 Selector 对象的 wakeup( )方法将使得选择器上的第一个还没有返回的选择操作立即回。如果当前没有在进行中的选择,那么下一次对 select( )方法的一种形式的调用将立即返回。...socketChannel = (SocketChannel) selectionKey.channel(); ByteBuffer byteBuffer

    99420

    搞清IO的四种模式

    中写入数据时,这是在客户端线程中进行的,而SocketChannel.write()方法可能由于网络原因导致一定的阻塞,从而导致线程池线程长时间耗费在等待上,导致服务器响应降低。...NIO本质上采用的是IO多路复用模式,实际上就是一个事件驱动模型,简单的理解为一个服务器在绑定某个端口之后,其可以在一个线程了同时监听多个客户端连接,而且服务器可以对每个客户端分别设置对其哪些事件感兴趣...这里的Selector就可以理解为一个多路复用器,每个客户端连接就是一个SocketChannel,这些SocketChannel会在Selector上注册,并且设置对各个Channel感兴趣的事件。...上, // 同时监听服务端和客户端的事件; // 2....AIO本质上还是使用的NIO的多路复用来实现的,只不过在模型上其使用的是一种事件回调的方式处理各个事件,这种方式更加符合NIO异步模型的概念,并且在编码难易程度上比NIO要小很多。

    70820

    Java网络编程——NIO处理写事件(SelectionKey.OP_WRITE)

    网上有一些例子都是在服务端读完数据后直接给客户端SocketChannel对应的SelectionKey注册上写事件(SelectionKey.OP_WRITE),写完数据后也不注销写事件: @Slf4j...socketChannel = (SocketChannel) selectionKey.channel(); ByteBuffer readBuffer = ByteBuffer.allocate...socketChannel = (SocketChannel) selectionKey.channel(); ByteBuffer writeBuffer = (ByteBuffer...,向服务端发送100MB的数据,在ByteBuffer readBuffer = ByteBuffer.allocate(MESSAGE_LENGTH);打上断点,运行到断点时,当服务端调用了socketChannel.write...这里的客户端是以阻塞模式运行的,即使把客户端的SocketChannel设置为非阻塞模式,也是无法及时收到服务端返回的数据的。

    91510
    领券