我最近遇到FileChannel,我是RandomAccessFile的粉丝。但我想知道为什么我会选择FileChannel
而不是RandomAccessFile
来读取文件并将该内容写入另一个文件。
是否有任何具体的表现原因?我不想出于任何目的使用FileChannel
的锁定,因为我认为这可能是可以使用filechannel的原因之一。我不想按other StackOverflow响应中的建议使用BufferReader
或类似内容。
答案 0 :(得分:0)
FileChannel API说:文件的一个区域可以直接映射到内存中;对于大文件,这通常比调用通常的读取或写入方法更有效。
答案 1 :(得分:0)
除非你使用带有直接缓冲区的FileChannel
并且永远不会自己访问数据,否则它们之间没有什么可供选择的,例如:您只需将其复制到SocketChannel.
这样更快,因为数据永远不必跨越JNI / JVM边界。
但我想知道你为什么不挑选BufferedReader
。对于逐行读取文件,它肯定比其中任何一个快几个数量级。
答案 2 :(得分:-1)
RandomAccessFile性能良好,它允许直接读写大多数主要类型。
答案 3 :(得分:-1)
FileChannel 可以安全地供多个并发线程使用。
答案 4 :(得分:-2)
RandomAccessFile来源:
看看RandomAccessFile实际上是在幕后使用FileChannel ......
public final FileChannel getChannel() {
synchronized (this) {
if (channel == null) {
channel = FileChannelImpl.open(fd, true, rw, this);
/*
* FileDescriptor could be shared by FileInputStream or
* FileOutputStream.
* Ensure that FD is GC'ed only when all the streams/channels
* are done using it.
* Increment fd's use count. Invoking the channel's close()
* method will result in decrementing the use count set for
* the channel.
*/
fd.incrementAndGetUseCount();
}
return channel;
}
}