Java操作高效并发操作读写文件,消息持久化到本地读取

现在在写一个埋点统计的站点API,客户端发送JSON格式字符串,站点API会进一步验证JSON数据然后上传到消息队列。系统中有个模块监视消息队列服务器是否异常,如果在发送... 现在在写一个埋点统计的站点API,客户端发送JSON格式字符串,站点API会进一步验证JSON数据然后上传到消息队列。系统中有个模块监视消息队列服务器是否异常,如果在发送消息到消息队列,消息队列异常,站点API会把消息持久化到本地。监视消息队列的线程会定期发送心跳判断消息队列服务器是否启动,启动后会把本地持久化的消息读取发送到消息队列。问题来了,本地持久化消息为文本字符串,每个文件都是随机生成,随机写入消息。现在是一行记录一条消息,如果消息数量少系统会把整个文件内容读取到内存然后发送到消息队列。如果文件太大会重新命名文件,单线程一行一行的读取消息。在读取消息的时候同时也可能有线程在向这个文件中写入消息。这种方法可控制并发,但是性能较低。
有没有方式把消息二进制写入到文件(占空间小),通过每次读取指定字节大小数据,然后转换字符串发送消息。现在问题就是消息大小不确定,怎么才能保证每次读取的字节块是整个消息。有没有更好的方式高效操作文件,读取消息?知道这方面技术的可以聊聊,说一说方案也行。
展开
 我来答
岳氏世风清9
2017-09-27 · TA获得超过362个赞
知道答主
回答量:342
采纳率:0%
帮助的人:168万
展开全部
楼主,如果写,先判断要写多大的文件、然后分段写,各线程写自己的段

如果读,也是先得到文件大小、再分段,然后各线程读自己的段
追问
多个线程同时读写一个文件,分段不仅不好控制,而且涉及到并发性能不行。暂时使用的是控制文件大小来完成。不过你的思路还是值得学习的,分还是给你了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式