请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于IoArgs的ByteBuffer大小问题

在 IoArgs 这里 ByteBuffer 现在改成 256 了,但字符串过小也不需要这么多,而文件的传输一般都是M以上的,所以对于 文件流来说,又显得小了,为什么搞个父类,然后根据文件或者字符串,让子类去调整bytebuffer 的大小呢?

private int limit = 256;
private ByteBuffer buffer = ByteBuffer.allocate(256);

正在回答 回答被采纳积分+3

2回答

Qiujuer 2019-09-10 23:00:52

其实在这里最开始的考虑还有“缓冲池”的技术的,但是因为篇幅实在有限,所以就没有扩展这个部分的内容了。


理论来说,我们会有很大的一个buffer池,里边有较大的几个数组,如果是小字符会分配一个可以容纳字符串大小的其中一节数组给他,然后使用warp的方式去得到一个buffer。当然文件同理。

这样的方式可以最大程度维护我们所有的内存,并且减少内存抖动的情况。同时可以根据不同业务使用不同的大小,甚至可以动态调整等策略。

0 回复 有任何疑惑可以回复我~
提问者 LillteZheng 2019-09-10 16:04:30

老师,还有个疑问,为什么要对String 类型的数据再抽出 bytes 的父类呢?发现 File 还是继承  sendPacket 和 ReceivePacket;那如果 byte 只是对 string 有作用,那这样做不是让类增加且不便于理解吗? - - 、

0 回复 有任何疑惑可以回复我~
  • Qiujuer #1
    在这里,我们主要的目的是让所有的外接可直接交互的类型,比如string、file等数据都转化为流的概念。
    以便在后续的流程中可以基于流去做一些封装,对于string来说就是内存bytes数组喽,文件来说当然可以直接使用文件流,这个是很好的,当然文件的流速度不够。
    
    所以我们划分了几个层次,packet、frame、ioargs,其实每个层次都可以做缓冲,用来提升传输速度。
    回复 有任何疑惑可以回复我~ 2019-09-10 23:03:32
  • 提问者 LillteZheng 回复 Qiujuer #2
    好的,谢谢老师,我再好好理解一下
    回复 有任何疑惑可以回复我~ 2019-09-12 17:07:25
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信