如何返回部分文件并发高效?

时间:2013-02-21 03:09:23

标签: java multithreading concurrency

在我们的项目中,我们将批量文件合并为一个大文件,假设为4~12GB

现在我需要编写一个服务器来处理客户端请求,

每个请求客户端都希望检索此大文件中的一个部分或将一个新文件推送到这个大文件中(尾部),

那么在低延迟时间内执行此操作的最佳方法是什么?

RandomAccessFileInputStream

3 个答案:

答案 0 :(得分:0)

如果您不将块重新组合到单个文件中,将获得最佳性能。下一步是使用NIO的FileChannel

答案 1 :(得分:0)

如果您使用的是Linux,我建议在bash shell中使用cat命令来组合文件。高效且不需要其他编程语言。

示例

cat file1.txt file2.txt >> file_combine.txt

答案 2 :(得分:0)

我认为你想要的是一个ReentrantReadWriteLock。

此锁定允许同时进行读取操作,一次只能进行一次写入操作。 您可以在每次读取操作之前获取读锁定,并在读取结束后释放它。 并且在每次写入操作之前写入锁定并在此之后释放它。

让您的客户拨打上述代码。希望它有所帮助。

final ReadWriteLock lock = new ReentrantReadWriteLock();

public void checkFile(String yourData) {

    lock.readLock().lock();

    boolean toWrite = false;
    // Read the file, check for data and update toWrite accordingly
    lock.readLock().unlock();

    if (toWrite) {
        lock.writeLock().lock();

        // write the data to the file

        lock.writeLock().unlock();
    }
}