在我们的项目中,我们将很多文件合并为一个大文件,假设为 4~12GB
现在我需要编写一个服务器来处理客户端请求,
每个请求客户端都想检索这个大文件中的一部分或将一个新文件推送到这个大文件中(尾部),
那么在低延迟下做到这一点的最佳方法是什么?
RandomAccessFile
? InputStream
?
在我们的项目中,我们将很多文件合并为一个大文件,假设为 4~12GB
现在我需要编写一个服务器来处理客户端请求,
每个请求客户端都想检索这个大文件中的一部分或将一个新文件推送到这个大文件中(尾部),
那么在低延迟下做到这一点的最佳方法是什么?
RandomAccessFile
? InputStream
?
我认为您在这里想要的是 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();
}
}
如果您不将块重新组合到单个文件中,将获得最佳性能。下一步是使用NIO 的FileChannel。
如果您使用的是 Linux,我建议cat
在 bash shell 中使用命令来组合文件。高效且不需要其他编程语言。
例子
cat file1.txt file2.txt >> file_combine.txt