其中内存映射文件在键陪读取大文件时可能会用上,因为内存映射不是直接把文件加载到JVM内存空间
而是借用 *** 作系统对文件的读取,这经历了由当前Java态进入到 *** 作咐亮枝系统内核态,再由 *** 作系统读取文件,
并返回数据到当前Java态的过程。由Java态进入 *** 作系统内核态离不开nio包中两个重要的类
FileChannel 和 ByteBuffer。FileChannel表示文件通道,可以从FileInputStream、FileOutputStream
以及RandomAccessFile对象获取文件通道,你可以从文件通道直接读取文件,衡敏也可以使用“内存映射”
即使用通道,将文件内存映射到ByteBuffer,可以映射一部分内容,也可以映射全部内容,使用内存映射
能大幅提高我们 *** 作大文件的速度
FileChannel 和 ByteBuffer文件读取
[java] view plain copy
package nio
import java.io.BufferedInputStream
import java.io.File
import java.io.FileInputStream
import java.io.IOException
import java.io.RandomAccessFile
import java.nio.ByteBuffer
import java.nio.MappedByteBuffer
import java.nio.channels.FileChannel
import java.nio.channels.FileChannel.MapMode
/**
*
* Channel类似与流,数据可以从Channel读取到Buffer,也可以从Buffer写入到Channel
* 但通道和流还是有区别,比如流只能是单向读或写,而通道可以异步读写
*
* @author yli
*/
public class FileChannelTest {
1、可以,使用Netty进行文件传输主要涉及到FileChannel文件通道,它用来连接文件,可以通过这个通道读写文件。在使用FileChannel之前必须先打开它,FileChannel无法直接打开,可以通兆察过InputStream、OutputStream或RandomAccessFile来获取FileChannel。
2、如果需要从FileChannel中读取数渣档据,要申请一个ByteBuffer,将数据从FileChannel读取到缓冲区中。read()方法返回的int值表示有多少个字节被读如猜乱取到了缓冲区中,表示读取到了文件末尾。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)