我有一个二进制协议,其中包含一些未知数量的初始标头数据(未知长度,直到标头完全解码),然后是应写入磁盘以供以后处理的数据流。
我有一个实现解码头,然后将文件数据写入磁盘,因为它来自ChannelBuffers中的一个或多个帧(所以我的处理程序是子类FrameDecoder,并逐步构建消息,而不是等待一个ChannelBuffer包含整个消息,并将文件数据写入每个帧的磁盘)。我关心的是这是否足够,或者使用像ChunkedWriteHandler这样的东西不仅仅是这个并且是处理大型上传所必需的。
是否有一种更优化的文件数据处理方式,而不仅仅是将每个帧从ChannelBuffer直接写入磁盘?
答案 0 :(得分:2)
只要吞吐量足够好,它就足够了。否则,您可能希望缓冲接收的数据,以便在接收的数据量不够大时,不要经常进行系统调用(例如,32KiB有界缓冲区)。
如果将transferTo/From
操作暴露给用户,Netty可能会更快,但这样的功能尚不可用。
答案 1 :(得分:1)
如果你的处理程序,你还应该考虑在前面添加一个ExecutionHandler。这将帮助您不被磁盘I / O阻止。否则,您可能会看到重磁盘访问速度减慢。