NIO ByteBuffer问题

问题描述

一直以来对ByteBuffer一知半解,对于如下问题傻傻分不清:ByteBuffer是缓存,NIO中的Socket也有读写缓存,网卡也有缓存,它们之间关系如何?本人的理解是,ByteBuffer属于应用级别缓存,它跟ShortBuffer,IntBuffer等等都继承自Buffer,只是不同基础数据类型的缓存,它从Socket的读缓存中读取数据,它将用户用socketChannle.write(ByteBuffer)写入到ByteBuffer中的数据写入到Socket写缓存,然后Socket根据TCP或者UDP协议讲来自应用层ByteBuffer缓存中的数据传给网卡缓存,网卡将数据封装成数据帧,最终以二进制流的形式传递到其它的网卡,然后同样的过程经过网卡缓存,到Socket读缓存,最后到ByteBuffer缓存,是这个过程么?请高人指点迷津!

解决方案

时间: 2024-11-01 04:57:40

NIO ByteBuffer问题的相关文章

JAVA NIO存在的问题

    JAVA 包含最新的版本JDK1.8的NIO存在一些问题,这些问题需要在编写NIO程序时要格外关注: NIO跨平台和兼容性问题     NIO是底层API,它的实现依赖于操作系统针对IO操作的APIs. 所以JAVA能在所有操作系统上实现统一的接口,并用一致的行为来操作IO是很伟大的.     使用NIO会经常发现代码在Linux上正常运行,但在Windows上就会出现问题.所以编写程序,特别是NIO程序,需要在程序支持的所有操作系统上进行功能测试,否则你可能会碰到一些莫明的问题.   

服务器-java 关于NIO实现UDP数据传输问题 ,急谢谢,C币不足请不要介意

问题描述 java 关于NIO实现UDP数据传输问题 ,急谢谢,C币不足请不要介意 各位大侠好,小弟想问一下问题,搞了一两天没有搞明白的.因为要实现一个UDP传输服务端,于是在网上找了很多资料然后就写了一个.但是写好之后发现有两个很严重的问题,希望各位大哥给点意见或者思路去解决.问题一:启动服务端,同时也启动客户端,客户端传输数据服务器正常接收,但是断开客户端后,再启动客户端,服务器就收不到任何客户端发送的消息,好像是服务器关闭了UDP一样,但是重启服务器后(重新打开UDP)客户端既可以发送信息

在Java中使用NIO进行网络编程

在JDK中,有一个非常有意思的库:NIO(New I/O).这个库中有3个重要的类,分别 是java.nio.channels中Selector和Channel,以及java.nio中的Buffer. 本篇文章我们首先了解一下为什么需要NIO来进行网络编程,然后看看一步一步来讲解 如何在网络编程中使用NIO. 为什么需要NIO 使用Java编写过Socket程序的同学一定都知道Socket和SocketServer.当调用某个调 用的时候,调用的地方就会阻塞,等待响应.这种方式对于小规模的程序非

Android在JNI中使用ByteBuffer的方法

  Android在JNI中使用ByteBuffer的方法 本文实例讲述了Android在JNI中使用ByteBuffer的方法.分享给大家供大家参考.具体如下: 一.ByteBuffer 定义 在NIO中,数据的读写操作始终是与缓冲区相关联的(读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区) 缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.ByteBuffer是最常用的缓冲区,它提供了读写其他数据类型的方法,且信道的读写方

开源一个基于nio的java网络程序

   因为最近要从公司离职,害怕用nio写的网络程序没有人能看懂(或许是因为写的不好吧),就调整成了mina(这样大家接触起来非常方便,即使没有socket基础,用起来也不难),所以之前基于nio写的网络程序就开放出来好了!       写的比较挫,大家见谅!       首先是PollServer类,主要处理select,做网络事件的监听和基于FutureTask的数据发送,代码如下: package gs.gate; import gs.gate.handle.ClientHandle; i

Java 高并发八:NIO和AIO详解_java

IO感觉上和多线程并没有多大关系,但是NIO改变了线程在应用层面使用的方式,也解决了一些实际的困难.而AIO是异步IO和前面的系列也有点关系.在此,为了学习和记录,也写一篇文章来介绍NIO和AIO. 1. 什么是NIO NIO是New I/O的简称,与旧式的基于流的I/O方法相对,从名字看,它表示新的一套Java I/O标 准.它是在Java 1.4中被纳入到JDK中的,并具有以下特性: NIO是基于块(Block)的,它以块为基本单位处理数据 (硬盘上存储的单位也是按Block来存储,这样性能

NIO 不调用iterator的remove的问题

问题描述 NIO 不调用iterator的remove的问题 package chatIO; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketC

java nio包的select的I/O问题

问题描述 最近小弟在学javanio包的slector模型,做的socket编程,遇到一些问题,贴代码服务端serverpublicclassServer{privateSelectorselector;privateServerSocketChannelsrvSocketChannel;privatestaticintport=9999;privateCharsetcharset=Charset.forName("GBK");publicServer(){try{selector=S

基于java.nio.channels的编程实践-I

服务端代码 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketCh