我想实现一个功能,程序启动后,实时接收其它程序传过来的对象,把对象的内容写入到本地的文件中,每30分钟生成一个文件。例如生成文件如下:
文件按时间随机命名:20120311134030.txt,文件内容
对象1
对象2
....
半小时后,生成第二个文件20120311142030.txt,文件内容
对象3
对象4
.....我现在实现了启动进程后,一直运行着,实时接收传过来的数据,每接收一个对象,生成一个文件。不知道怎么控制,可以让程序自己判断,每过30分钟,才关闭写入。然后再把接下来接收到的写入到新的文件中去。
文件按时间随机命名:20120311134030.txt,文件内容
对象1
对象2
....
半小时后,生成第二个文件20120311142030.txt,文件内容
对象3
对象4
.....我现在实现了启动进程后,一直运行着,实时接收传过来的数据,每接收一个对象,生成一个文件。不知道怎么控制,可以让程序自己判断,每过30分钟,才关闭写入。然后再把接下来接收到的写入到新的文件中去。
后来我是这样实现的,每个线程接收完数据,单独写入文件,这样只有接收数据时用多线程。最终服务器的指定位置生成了大量文件,我写了个脚本,每10分钟把这些文件合并成一个。
其实我还是顾虑我上面提到的那个问题,文件被锁,前面接收的数据会不会丢?
希望大家继续提供建议,今天下班前结贴。
采用Channel和MappedBuffer来更新数据。
多个线程操纵一个文件进行数据存储,是十分困难的,即使在你知道目标文件的大小情况下,
写入数据也会因为线程安全而最终变成依次写入。和一个线程持续写入,差不太多。多个线程分别生成多个文件,最后再合并成一个文件。
这就要看合并的方式咯,如果合并的方式不佳,最终效果,还会不如单线程的持续写入的效果。
如果楼主有兴趣玩多个线程写一个文件的话。
不妨试试,多个线程同时向文件的内存映射当中写入数据,
当数据达到一定的量(或某个条件)时,统一更新到硬盘中去。