开发者社区> 问答> 正文

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

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

跪谢

展开
收起
kun坤 2020-06-07 16:30:41 569 0
1 条回答
写回答
取消 提交回答
  • 可以考虑先发送一个文件大小,比如用固定的头两个字节表示。

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

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

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

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

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

    2020-06-07 16:30:46
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载