java nio 文件读取的问题:报错 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

java nio 文件读取的问题:报错

kun坤 2020-06-07 16:30:41 22

现在有四个客户端跟服务器连接,现有发送文件的客户端发送给server,之后由server发送给另外四个客户端,可是现在发送的时候,如果不加入channel.socket().shutdownOutput(),那么接收方一直不会=-1,而我的想法是要保持那4个客户端与server相连接,不想断开他们;如果不加入,又判断不了数据的完整性,每次客户端read会分几个事件去读,请问怎么做?

跪谢

Java
分享到
取消 提交回答
全部回答(1)
  • kun坤
    2020-06-07 16:30:46

    可以考虑先发送一个文件大小,比如用固定的头两个字节表示。

    取到大小后,如果读取了等于文件大小的数据后,就停止接受,

    是否关闭连接看你的处理逻辑

    ######但是现在是这样,不是我client没有读完这个channel数据,而是说server发送了文件给client,但是client接收的时候,由于是非阻塞的,分开了两次事件,两次isReadable() 事件了,怎么去拼接生成文件?还是说我流程有问题?我第一次只读了channel的所有数据,但是这个数据只是这个文件的一部分,剩下的再第二个isReadable中呢。######

    弄明白了,还是理解有误。

    sever send 的时候,需要跟进一个文件大小的length,在channel.read的时候,如果想不断开,那么判断read>=0,然后判断size是否>=length,如果大于等于,那么break;如果小于,那么说明还没读完,继续读就可以,此时,一次性会读完所有数据,而不会分开两个isReadable()去读,如果发生传递一个文件,分开两个isReadable()读的话,那么说明你第一次没读干净,导致需要开启另外一个事件去读。

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题