Dojo
最新
最佳
搜索
订阅
解道Jdon
架构设计
领域驱动
DDD介绍
DDD专辑
战略建模
领域语言UL
领域事件
商业分析
工作流BPM
规则引擎
架构师观点
数据工程
产品经理
系统思维
微服务
微服务介绍
微服务专辑
模块化设计
SOA
API设计
clean架构
SpringBoot
分布式事务
分布式架构
Kubernetes
DevOps
编程设计
GoF设计模式
模式专辑
面向对象
函数式编程
编程语言比较
编程工具比较
形式逻辑
前端编程
Reactive编程
Jdon框架
Rust语言
人工智能
Web3
模因梗
幽默梗
程序员吐槽
面试技巧
Java入门
数字化转型
认知偏差
道德经
更多话题
nio 问题
04-07-06
lyon
使用java.nio包后,建立连接后,读取的请求数据都是buffer,那如何实现读取一个数据包的需求呢?(数据包的长度是第一个字节)以前用stream流来考虑的话,非常直观,但是现在的nio是使用的ByteBuffer,难道我要对ByteBUffer中的byte数据重新做队列来实现读数据包的需求?
或许是我的观念还停留在流的概念上//:<
banq
2004-07-11 21:01
buffer有很多子类啊,如StringBuffer等。
NIO需要改变到对Buffer操作的观点。
Azure_2003
2004-07-15 18:02
确实需要重新对字节进行操作,nio提供了许多方法可以让你很方便的操作字节,比如要截取整型长度,可以使用 int length=buffer.getInt();
Azure_2003
2004-07-15 18:03
数据包的长度不是第一个字节,是前四个字节
JACK_GQF
2005-08-22 09:51
网络协议基本的通讯单位是一个一个的消息包。在用socket传输这些包的时,首先要解决的一个问题是如何解决包与包之间的边界问题。socket传输的是流,一个send中发出的消息,在对方不一定在一个recv中收到,可能要多次recv,或者一个recv收到多个send中放出的包。所以必须由应用层协议自己来解决包的定界问题。通常有两种方法,一种是每个包以一个特殊的字符或者字符串来结束,如http协议就是以两个'\n'作为一个消息的结束标记;另一种方法就是,所有的消息都有一个固定长度的消息头,在消息头中指出这条消息的长度。我们的协议是采用第二种方法,这也是大部分协议采用的方法。
lyerliu
2005-12-09 17:52
NIO,也是按字节读的,buffer是通过channel通道消息包传递过来放在buffer缓存中的吧,不应该说在传buffer吧?? 还是要按字节读哦……
欢迎进入17037443 网络编程群讨论,共同学习探讨