我有一个用例,其中我的多个线程正在将数据写入相同的文件通道(池化),并且每个线程在文件中都有偏移量,从那里它们可以开始写入,直到要写入的数据的长度。因此,当我从池中请求文件通道时,如果通道尚未打开,它将以"rw“模式打开通道,并返回该文件通道(打开的文件可能是新文件,即大小= 0),否则将返回缓存通道。问题是线程可能不特定地写入数据,这意味着偏移量为1,000,000的线程可能在偏移量为0的线程之前开始写入。假设我打开了一个新文件(大小= 0),偏移量为1,000,000的线程在偏移量为0的线程之前开始写入数据(使用write(buffer, position) API)。
我的第一个问题:这是允许的吗,或者如果允许的话,我会得到一些异常:什么是我的数据被正确写入的保证。第三。当my (offset = 1,000,000)完成对文件的写操作后,空空间(0-999,999)中的内容会是什么?操作系统将如何分配这个中间空间?
发布于 2010-10-22 02:17:49
在没有实际尝试你所描述的内容的情况下,这里有一个有根据的猜测:
第一个问题: FileChannel是线程安全的,并且可以根据需要扩展文件大小(“当写入超过当前大小的字节时,文件的大小会增加”),所以我认为这是允许的。
第二个问题:不能保证您的数据被正确写入;这完全取决于您作为程序员的技能。:)
第三个问题:我希望“空白空间”的字节内容与操作系统相关,但您可以编写一个简单的程序来测试这一点。
https://stackoverflow.com/questions/3990417
复制相似问题